我想要做的是 - >在新線程中創建一個新對象。 喜歡的東西:如何使用boost :: lambda爲現有指針創建新對象?
Class* object = 0;
Arg arg;
boost::thread t(lambda::bind(object = lambda::new_ptr<Class>()(boost::ref(arg));
它不能編譯,什麼是正確的做法?
我想要做的是 - >在新線程中創建一個新對象。 喜歡的東西:如何使用boost :: lambda爲現有指針創建新對象?
Class* object = 0;
Arg arg;
boost::thread t(lambda::bind(object = lambda::new_ptr<Class>()(boost::ref(arg));
它不能編譯,什麼是正確的做法?
感謝ildjarn,我試着用升壓::鳳,得到它的工作,代碼爲:
Class* object = 0;
CArg arg0;
Arg arg1;
boost::thread t(boost::phoenix::val(boost::ref(object)) = boost::phoenix::new_<Class>(boost::cref(arg0), boost::ref(arg1));
再次,從ildjarn,更好的代碼是:
類*對象= 0;
CArg arg0;
Arg arg1;
namespace phx = boost :: phoenix;
升壓::線程t(PHX :: REF(對象)= PHX :: new_ <類>(PHX :: CREF(爲arg0),PHX :: REF(ARG1));
這應該是'boost :: thread t(phx :: ref(object)= phx :: new_ < Class >(phx :: cref(arg0),phx :: ref(arg1));'(給定'namespace phx = boost: :phoenix;')。值得注意的是,你應該從命名空間'boost :: phoenix'使用'ref' /'cref'而不是命名空間' boost'。 – ildjarn 2013-02-20 01:09:57
非常感謝,它好多了,我會更新代碼。 – 2013-02-20 02:33:56
提示:使用[ Boost.Phoenix](http://www.boost.org/libs/phoenix/)而不是Boost.Lambda - 後者多年來已被棄用 – ildjarn 2013-02-19 01:19:54
如果C++ 11是您的一個選項,只要執行' std :: thread t([&] {object = new Class(arg);});' – 2013-02-19 01:38:27
Thanks guys,but I can not use C++ 11 right now。I'm going to try Phoenix ... – 2013-02-19 03:37:15