0

从 boost::bind 文档(http://www.boost.org/doc/libs/1_53_0/libs/bind/bind.html#with_functions)中,“绑定的参数被复制并由返回的函数在内部保存对象”,但是如果有办法可以将参数复制到那些函数对象中?

IE:

#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?
}

提前致谢。

4

1 回答 1

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 函数中没有区分它们的机制。

有关 Boost.Function(和其他地方)中使用的技术的详细描述,请查看 Nevin Liber在 Boostcon 2010 上的类型擦除演讲

于 2013-02-19T16:47:18.533 回答