【发布时间】:2015-12-21 09:59:03
【问题描述】:
我有一个静态函数Bar::Function(std::string s1, std::string s2, std::string s3 ),我想将它作为函数指针传递给具有boost::function 成员的类Foo 的构造函数。
但这三个字符串是在Foo() 类中创建的,尚不知道该函数何时作为函数指针传递给 Foo 的构造函数。
我应该像在main() 中那样简单地传递三个空字符串吗?
class Foo(boost::function<int(std::string, std::string, std::string)> fFunction)
{
public:
Foo()
{
fnCallback = fFunction;
}
int Call()
{
return fnCallback("first", "second", "third")
}
protected:
boost::function<int(std::string, std::string, std::string)> fnCallback;
};
int main(int /*nArgc*/, char */*paszArgv*/[])
{
boost::function<int(std::string, std::string, std::string)> fn = boost::bind(Bar::Function, "", "", "");
Foo oFoo(fn);
oFoo.Call();
return 0;
}
class Bar
{
public:
static int Function(std::string s1, std::string s2, std::string s3)
{
std::cout << s1 << s2 << s3 << std::endl;
}
};
编辑:这就是代码的外观。函数指针只保存函数的地址。调用时传递参数!
fn = &Bar::Function;
【问题讨论】:
-
当你传递一个函数指针时,它没有参数。
-
我发布了示例代码。顺便说一句,有很多语法错误...
-
这个问题是XY problem 的经典例子。您不需要为此使用
boost::function。 (事实上,你不想为此使用boost::function。)一个简单的函数指针就足够了。
标签: c++ function-pointers boost-function