为什么两个bind
版本都在编译和工作没有问题,即使我在每个调用中使用不同的参数类型?
我期望版本1产生编译错误......
#include <iostream>
#include <functional>
using namespace std;
class Test
{
public:
bool doSomething(){ std::cout << "xxx"; return true;};
};
int main() {
Test foo;
// Version 1 using foo
std::function<bool(void)> testFct = std::bind(&Test::doSomething, foo);
// Version 2 using &foo
std::function<bool(void)> testFct2 = std::bind(&Test::doSomething, &foo);
testFct();
testFct2();
return 0;
}
答案 0 :(得分:1)
std::function<bool(void)> testFct = std::bind(&Test::doSomething, foo);
这将绑定到foo
的副本,并将该函数称为copy.doSomething()
。请注意,如果您希望在foo
本身上调用该函数,则会出错。
std::function<bool(void)> testFct2 = std::bind(&Test::doSomething, &foo);
这将绑定到指针到foo
并将该函数调用为pointer->doSomething()
。请注意,如果在调用函数之前foo
已被销毁,则会出错。
我期望版本1产生编译错误......
如果您愿意,可以通过使Test
不可复制来禁止此行为。