我试图搜索并找到了类似的问题:
问题1
问题2
从代码中可以明显看出f1和f2是不同的。第一个cout显示true,因为类型相同,没问题。但为什么第二个cout也是true呢?为什么function::target()会返回nullptr?
附言:我想创建一个简单的委托系统,这样我就可以传递任何函数(全局函数、静态函数、成员函数)了。使用std::function我可以添加回调,但我不知道如何删除它。
问题1
问题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?
附言:我想创建一个简单的委托系统,这样我就可以传递任何函数(全局函数、静态函数、成员函数)了。使用std::function我可以添加回调,但我不知道如何删除它。
int(ClassA*, int, int)
本身不是成员函数类型。因此,在这种情况下,std::function
目标类型不是成员函数类型。这会影响target
成员函数的结果。 - Cheers and hth. - Alff3.target_type() == typeid(&ClassA::add)
- Barry