来自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?
}
提前感谢。
答案 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