我有一个由std::set
组成的类,声明为
std::set<customPair, decltype(comp)> mySet;
具有(在类外定义(,
bool comp (customPair a, customPair b) { return a.first >= b.first}
和,
typedef std::pair<int, int> customPair;
因此,在我的class
声明中,我使用声明mySet
class Example:
public:
std::set<customPair, decltype(comp)> mySet;
当我在我的构造函数中写入(即定义(它时
Example::Example(){
mySet(comp);
}
我得到以下错误:
.../stl_tree.h:880:7 error: function returning a function
key_comp() const
我想知道为什么:
std::set<customPair, decltype(comp)> mySet(comp);
例如,在任何方法中动态声明时都有效,但在我的情况下(在类内(失败了吗?
decltype(comp)
的类型是函数,但std::set
比较器需要是函数指针或函子。更改为decltype(&comp)
修复了编译问题。
您还需要将函数指针的一个实例传递给std::set
构造函数,否则它将为null,并在尝试添加元素时崩溃。您可以在每个构造函数的初始化程序列表中执行此操作:
Example()
:mySet(&comp)
{
}
或者当您声明成员时直接在类中:
std::set<customPair, decltype(&comp)> mySet{&comp};
请注意,由于mySet(&comp)
中c++的特殊性,您可以只使用mySet(comp)
,并且comp
会自动转换为函数指针,这与decltype
中不进行转换的情况不同。