如何将参数绑定到boost :: function?

时间:2013-02-15 14:30:10

标签: c++ boost boost-bind boost-function

来自boost :: bind docs(http://www.boost.org/doc/libs/1_53_0/libs/bind/bind.html#with_functions),“绑定的参数由返回的函数对象在内部复制和保存”,但是如果有办法我可以在这些函数中复制参数对象

即:

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <string>

using namespace std;

void doSomthing(std::string str)
{
}

int main()
{    
    boost::function<void(void)> func_obj = boost::bind(&doSomthing, "some string");
    //how can I get the std::string argument("some string") through func_obj?
}

提前感谢。

1 个答案:

答案 0 :(得分:0)

除了调用它之外,Boost.Function对象并没有什么用处 - 而且这是设计的。 (你可以复制它,销毁它,比较为NULL,但不是更多)。

请考虑以下代码:

void Foo () {}
void Bar ( int i ) { printf ( "%d", i ); }

boost::function<void(void)> fFoo (Foo);
boost::function<void(void)> fBar = boost::bind (Bar, 23);

这两个对象旨在以相同的方式对待。它们是相同的类型,并且表现相同。在增强功能中没有用于区分它们的机制。

有关Boost.Function(和其他地方)使用的技术的详细描述,请查看Nevin Liber的type erasure talk from Boostcon 2010