最近我读了这篇文章: 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 :(得分:3)
您正在使用bind
中的std::tr1
(Visual Studio附带的版本)。
您需要使用属于bind
库的Boost.Lambda
版本,即boost::lambda::bind
。请注意,这与boost::bind
不同。
您需要#include <boost/lambda/bind.hpp>
。
答案 1 :(得分:2)
如何使用C ++ 11x lambdas呢?
boost::thread meshLoadThread([&](){ meshPtr = MeshManager::GetInstance().LoadMesh(id); });