Из буста :: связать документы ( 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?
}
заранее спасибо.
На самом деле с объектом 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’s тип разговора о стирании от Boostcon 2010
Других решений пока нет …