繁体   English   中英

使用boost :: thread中的lambda检索返回值

[英]Retrieve return value with lambda from boost::thread

最近我读了这篇文章: 如何使用boost.lambda和boost.thread获取线程的返回值?

我试图实现答案,但是我得到了一个我无法解决的错误。

我的代码是这样的:

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 *'

我知道它应该正常工作,因为在这个例子中它也有效! 有人有什么建议吗?

您正在使用来自std::tr1 bind (Visual Studio附带的版本)。

您需要使用属于Boost.Lambda库的bind版本,即boost::lambda::bind 请注意,这与boost::bind

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

如何使用C ++ 11x lambdas呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM