【发布时间】:2015-03-04 02:14:13
【问题描述】:
我试图搜索和这里类似的问题:
question 1
question 2
但无论如何,我无法比较成员函数。这是一个例子:
class ClassA
{
public:
int add(int a, int b)
{
return a + b;
}
};
int main()
{
ClassA a1{};
function<int(int, int)> f1 = bind(&ClassA::add, a1, placeholders::_1, placeholders::_2);
function<int(int, int)> f2 = bind(&ClassA::add, a1, placeholders::_1, placeholders::_2);
cout << boolalpha << "f1 == f2 " << (f1.target_type() == f2.target_type()) << endl; // true
cout << (f1.target<int(ClassA::*)(int, int)>() == nullptr) << endl; // true
return 0;
}
从代码中可以明显看出 f1 和 f2 是不同的。第一个cout显示true,因为类型相同,没关系。但是为什么第二个 cout 是 true 呢?为什么 function::target() 返回 nullptr?
P.S.:我想创建一个简单的委托系统,这样我就可以传递任何函数(全局、静态、成员)。使用 std::function 我可以添加回调,但我不知道如何删除它。
【问题讨论】:
标签: c++ function c++11 function-pointers