私はBartosz Milewski hereのチュートリアルに従っており、非常に便利です。 しかし、私がまだ持っていないC++ 11スレッディング標準のjust::thread実装を使用しているので、私はチュートリアルの作者がそのようにするのは簡単だと言っています。 。これはシリーズの最初の3つのチュートリアルの場合のようですが、私は第4の問題にいくつかの問題にぶつかりました。ここに私のコードは次のとおりです。C++ - Boost.Promise、Boost.Unique_FutureとMove Semantics
#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));
コンパイラは文句場所:
エラーC2248:「後押しを:: promise :: promise ':プライベートにアクセスできない メンバーは' boost :: promise 'クラスで宣言されました
誰でも問題の原因を示唆することはできますか?
ありがとうございます!
Boost.Threadsは移動セマンティクスをサポートしているため、コンパイラはそれをサポートしていないか、C++ 11モードでコンパイルしていません(たとえば、GCCの '-std = C++ 0x')。 –
私は 'std :: move()'を他の例で使用していましたが問題ありませんでしたので、それはそれだとは思いませんが、間違っている可能性があります。私は 'boost :: move()'も試みましたが、結果は同じでした。 –