0

boost :: bind docs(http://www.boost.org/doc/libs/1_53_0/libs/bind/bind.html#with_functions)から、 "bindが取る引数は、返された関数によって内部的にコピーおよび保持されますオブジェクト」ですが、これらの関数オブジェクトに引数をコピーする方法があればどうでしょうか。

すなわち:

#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);

これらの2つのオブジェクトは、同じように扱われるように設計されています。それらは同じタイプであり、同じように動作します。ブースト機能には、それらを区別するためのメカニズムはありません。

Boost.Function(およびその他の場所)で使用されている手法の詳細については、 Boostcon2010のNevinLiberの型消去トークをご覧ください。

于 2013-02-19T16:47:18.533 に答える