我想使用boost :: bind将静态成员函数绑定到boost :: function。以下是我想做的事情(不工作)的例子。
class Foo {
public:
static void DoStuff(int param)
{
// To do when calling back
}
};
class Question {
public:
void Setup()
{
AssignCallback(boost::bind(&Foo::DoStuff, _1)); // How to bind the static funciton here
}
void AssignCallback(boost::function<void(int param)> doStuffHandler)
{
...
...
}
};
我之前使用过这种语法的boost :: bind和成员函数:
boost::bind(&Foo::NonStaticMember, this, _1, _2, _3, _4)
但对于静态成员来说,这显然是不正确的。
请告诉我如何使用boost :: bind?
正确绑定类的静态成员函数答案 0 :(得分:3)
将像正常功能绑定一样完成。 对于静态函数,您只需要使用其类名来识别编译器的函数并跳过此参数,因为静态finctions绑定到类而不是对象。 以下是一个简单的例子:
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
void test(boost::function<bool(int, int)> func)
{
std::cout<<"in test().\n";
bool ret = func(10, 20);
std::cout<<"Ret:"<<ret<<"\n";
}
class Test
{
public:
static bool test2(int a, int b)
{
std::cout<<"in test2().\n";
return a>b;
}
};
int main()
{
test(boost::bind(&Test::test2, _1, _2));
return 0;
}
O/P:
in test().
in test2().
Ret:0
你不应该使用它作为静态函数没有这个指针。
int main()
{
test(boost::bind(&Test::test2, this, _1, _2));-----> Illegal
return 0;
}
Below error will occur:
techie@gateway1:myExperiments$ g++ boost_bind.cpp
boost_bind.cpp: In function âint main()â:
boost_bind.cpp:26: error: invalid use of âthisâ in non-member function
希望这会有所帮助。 : - )
答案 1 :(得分:1)
您的代码是正确的。也许您遇到一些编译器问题?你能引用编译输出吗?
您也可以尝试使用std :: function和std :: bind。只能用&#34; functional&#34;替换boost标头。标题和写
std::placeholders::_1
而不是
_1