Dan*_*tes 1 c++ pointers functional-programming bind callback
我有一个存储函数回调的类,另一个有一个我想要设置为回调的成员函数,如下所示:
using namespace std::placeholders;
class A {
typedef std::function<void(int)> Callback;
Callback callback;
A() {}
A(Callback f) : callback(f);
do_something(int x) { callback(x); }
}
class B {
A a;
void function(int x) { printf("%d", x); }
B()
{
a = A( std::bind(&B::function, this, _1) );
}
Run Code Online (Sandbox Code Playgroud)
当我这样做并尝试调用回调函数时,我在MSVC上得到一个无效的函数调用错误.我在这做错了什么?
编辑01/21/2014
正如axalo指出的那样,此代码中没有错误(除了一些拼写错误).它确实编译.但是我正在做一些测试,我得到一个奇怪的行为:当我在构造函数上使用'bind'和'this'指针时,即,
B() { a = A( std::bind( &B::function, this, _1)); }
Run Code Online (Sandbox Code Playgroud)
'this'指针与指向类实例的实际指针不同,如果我这样做:
void helper() = { a = A( std::bind( &B::function, this, _1)); }
B() { }
Run Code Online (Sandbox Code Playgroud)
并从实例调用helper(),我得到正确的'this'指针.这种行为是否正确?我不应该相信构造函数中'this'指针的值?
谢谢.
您的问题中的代码无法编译.但是在修复了一些语法错误之后,你的代码实际上会编译.
using namespace std::placeholders;
class A
{
public:
typedef std::function<void(int)> Callback;
Callback callback;
A() {}
A(Callback f) : callback(f) {}
void do_something(int x)
{
callback(x);
}
};
class B
{
A a;
void function(int x)
{
printf("%d", x);
}
B()
{
a = A(std::bind(&B::function, this, _1));
}
};
Run Code Online (Sandbox Code Playgroud)
将其与您的代码进行比较,以找出错误的来源.