【发布时间】:2017-01-27 04:47:03
【问题描述】:
我定义了一个类,然后将指向 Foo 的指针保存在 priority_queue 中,并使用我定义的 cmp 函数。
但是如果 cmp-funtion 调用 function-object 就会出错:
class Foo
{
friend bool cmp(Foo *, Foo *);
public:
Foo() = default;
Foo(int x):val(x) {}
private:
int val;
};
bool cmp(Foo *a, Foo *b)
{
return a->val < b->val;
}
int main()
{
priority_queue<Foo*, vector<Foo*>, decltype(cmp)*> que;
que.push(new Foo(5));
que.push(new Foo(6));
return 0;
}
functione-object正常运行。
class Foo
{
friend struct cmp;
public:
Foo() = default;
Foo(int x):val(x) {}
private:
int val;
};
struct cmp
{
bool operator()(Foo *a, Foo *b)
{
return a->val < b->val;
}
};
int main()
{
priority_queue<Foo*, vector<Foo*>, cmp> que;
que.push(new Foo(5));
que.push(new Foo(6));
return 0;
}
【问题讨论】:
-
IDE 是 code::blocks
-
“发生错误”?真的吗?
-
未编译错误
-
默认初始化的函数指针的值为
nullptr。struct cmp的默认初始化实例是一个有效实例。decltype(cmp)就是bool(Foo *a, Foo *b)- “某个函数采用两个Foo*并返回一个bool”。没有任何东西将它与名为cmp的特定函数联系起来。同样,decltype(42) x;等价于int x;- 它不会神奇地为x赋予42的值。
标签: c++ class c++11 function-pointers function-object