#include <thread> class C{ public: // blah blah blah void run() { std::thread thd(&C::impl, 10); thd.join(); } void impl(int n) { //do something } }; int main() { C c; c.run(); return 0; }
上記のコードをコンパイルすると、MSVC12EEでは
「1 引数を取り込む関数には評価されません。」
というエラーが表示される。
このエラーメッセージに惑わされてしばらく彷徨ったが、英語で検索したら一発で答えが出た。正解は
#include <thread> class C{ public: // blah blah blah void run() { std::thread thd(&C::impl, this, 10); thd.join(); } void impl(int n) { //do something } }; int main() { C c; c.run(); return 0; }
と、this
をthreadの第2引数に渡すことだった。
日本語でもすでにスライドで紹介(22ページ)されていたことに解決した後に気付く。
一番下のやり方しかしてなかった。