2013-02-19 74 views
0

我想要做的是 - >在新線程中創建一個新對象。 喜歡的東西:如何使用boost :: lambda爲現有指針創建新對象?

Class* object = 0; 
Arg arg; 
boost::thread t(lambda::bind(object = lambda::new_ptr<Class>()(boost::ref(arg)); 

它不能編譯,什麼是正確的做法?

+2

提示:使用[ Boost.Phoenix](http://www.boost.org/libs/phoenix/)而不是Boost.Lambda - 後者多年來已被棄用 – ildjarn 2013-02-19 01:19:54

+1

如果C++ 11是您的一個選項,只要執行' std :: thread t([&] {object = new Class(arg);});' – 2013-02-19 01:38:27

+0

Thanks guys,but I can not use C++ 11 right now。I'm going to try Phoenix ... – 2013-02-19 03:37:15

回答

0

感謝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));

+1

這應該是'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

+0

非常感謝,它好多了,我會更新代碼。 – 2013-02-20 02:33:56

相關問題