我正在按照Bartosz Milewski在这里的一些教程进行学习,我觉得非常有用。 然而,作者使用了C++11线程标准的 just::thread 实现(我目前还没有),因此我决定暂时采用boost线程,因为教程的作者说这很容易做到。这在系列的前三个教程中似乎是成立的,但是我在第四个教程中遇到了一些问题。以下是我的代码:
#include <iostream>
#include <cassert>
#include <boost\thread.hpp>
#include <boost\thread\future.hpp>
void thFun(boost::promise<std::string> & prms)
{
std::string str("Hi from future!");
prms.set_value(str);
}
int main()
{
boost::promise<std::string> prms;
boost::unique_future<std::string> fut = prms.get_future();
boost::thread th(&thFun, std::move(prms)); // error C2248: 'boost::promise<R>::promise' : cannot access private member declared in class 'boost::promise<R>'
std::cout << "Hi from main!";
std::string str = fut.get();
std::cout << str << std::endl;
th.join();
return 0;
}
下面这行代码似乎引发了一个我不理解的问题:
boost::thread th(&thFun, std::move(prms));
编译器报错信息如下:
error C2248: 'boost::promise::promise' : cannot access private member declared in class 'boost::promise'
请问有谁能够提供解决方案吗?
先行感谢!
std::move()
,没有问题,所以我不认为是这个问题 - 但我可能错了。我还尝试过boost::move()
,但结果是一样的。 - Pat Mustard