1

bind为什么即使我在每次调用中使用不同的参数类型,两个版本的编译和工作都没有问题?

  1. 版本 1 -> 参数 foo 与
  2. 版本 2 -> foo 的参数地址

我预计版本 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;
}
4

1 回答 1

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

于 2013-09-11T11:50:49.623 回答