2016-05-05 9 views
0

私は、Visual C++で以下のコードを追加して、削除された関数について深刻なエラーを受けています。 (VS 2015 アップデート2.私もVS 15のプレビューを試みましたが、それは同じです)Visual C++でExecutorでboost :: asyncを使用できますか?

ClangとGCCの最新バージョンはこれでOKですが、おそらくVSはちょっと厳しいですが本当に正しいですか?

#define BOOST_THREAD_PROVIDES_FUTURE 
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION 
#define BOOST_THREAD_PROVIDES_EXECUTORS 

#include <boost/thread/future.hpp> 

class TestEx { 
public: 
    void submit(std::function<void()>) { 
    } 

    bool try_executing_one() { 
     return false; 
    } 

    bool closed() { 
     return false; 
    } 

    void close() { 
    } 
}; 

int main() 
{ 
    TestEx tex; 
    boost::async(
     tex, 
     []() {}); 

    return 0; 
} 

これをコンパイルしてみたいが、アップデート2のVisual Studio 2015へのアクセス権を持っていて、ここでそうオンライン行うことができ後押ししていない場合。

http://rextester.com/BAX37541

+1

を使用することで指摘したように'std :: function'が非コピー可能型のコピーをトリガーしています。これがMSVCのバグであれば私は驚くことはありません。彼らの実装は ''で、不必要にコピーすることが知られていましたが、私は指を指すのに十分な大きさのテンプレートをほどいたわけではありません。 –

+1

'' std :: function'、 '' boost :: executor_adaptor' '(http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html#thread)を使い続けるには、 .synchronization.executors.ref.executor_adaptor)はあなたのクラス( 'Executor'コンセプトに従う)をラップし、' std :: function'への変換を行います。 http://rextester.com/edit/IZN86995 'Executor'概念と' boost :: executor'の違いについては、[here](http://www.boost.org/doc/libs/1_60_0/doc)を参照してください。 /html/thread/synchronization.html#thread.synchronization.executors.rationale.closure)。 –

+0

素晴らしい提案をありがとう。 'submit'関数のテンプレートが動作するように見えます。後で生産コードで試してみることを楽しみにしています。何が起こっているのか正確に何かを考え出すためにテンプレートの拡張をデバッグすることができればうれしいです。 –

答えて

1

ショーン・クラインは、答えはそれを受け入れることのように見える `テンプレート 空提出(閉鎖&){}` であなたの `submit`機能を交換してみてください boost::executor_adaptor

関連する問題