2011-12-07 33 views
3

最近我看到這篇文章: How do I use boost.lambda with boost.thread to get the thread's return value?從升壓與拉姆達檢索返回值::線程

我試圖執行的答案,它去相當不錯,除了我得到一些解決不了的錯誤。

我的代碼是這樣的:

falcon::Mesh* falcon::ResourceManager::GetMesh(const std::string& id) 
{ 
    Mesh* meshPtr; 
    boost::thread meshLoadThread(boost::lambda::var(meshPtr) = bind(&MeshManager::LoadMesh, MeshManager::GetInstance(), id)); 
    meshLoadThread.join(); 
    return meshPtr; 
} 

但是,當我嘗試編譯,我得到以下錯誤

error C2440: '=' : cannot convert from 
    'const std::tr1::_Bind<_Result_type,_Ret,_BindN>' 
to 'falcon::Mesh *' 

我知道它應該正常工作,因爲在本例中它也能工作! 任何人有任何建議?

+0

給了我一個類似的錯誤,而不是它不是性病:: TR1 ::現在綁定,但的boost ::綁定 錯誤錯誤C2440: '=':不能從「常量的boost ::轉換_bi :: bind_t 'to'falcon :: Mesh *' – ThijsM

+0

我不小心刪除了我以前的評論。我添加了一個我認爲應該解決這個問題的答案。 – interjay

回答

3

您正在使用從std::tr1bind(隨Visual Studio中的版本)。

您需要使用作爲Boost.Lambda庫的一部分的bind版本,即boost::lambda::bind。請注意,這與boost::bind不一樣。

您將需要#include <boost/lambda/bind.hpp>

+0

你確定它是boost :: lambda :: bind,因爲它在這裏表示「bind不是boost :: lambda的成員」 – ThijsM

+0

@ThijsM看到我的編輯,你需要include。 – interjay

+0

最後編譯,感謝您的幫助!終於得到了這個問題的答案:) – ThijsM

2

如何使用C++ 11X lambda表達式呢?

boost::thread meshLoadThread([&](){ meshPtr = MeshManager::GetInstance().LoadMesh(id); }); 
+0

嗯,我也會在這一個去吧;) – ThijsM