2017-11-23 8 views
1

Java/Node.jsプログラミングの長い年月を経て、私はC++に戻ってきましたので、私はテンプレートに触れていません(私はそれに取り組んでいます) 。C++好都合なケースtypename/datatype name/class nameをスレッドコンストラクタに渡す

並行性を見直している間、私は偶然、私は非呼び出し可能オブジェクトを渡した後、私はエラーとソースコードを勉強するならばどのような、私が試したどのような次のような場合

class Test 
{ 
}; 

int main() 
{ 
    std::thread t(Test); 
} 

に際してたつまずきました。しかし、私は誤って型名を渡しました。プログラムは問題なく実行されたので、私は困惑した。

は、その後、私は

int main() 
{ 
    std::thread t1(int); 
} 

より多くの愚かな何かを試してみましたが、何とかそれは同様に働きました。 これらの2つのケースは正しくコンパイルされ、実行されました。私は方法を取得しません。 それはしようとした場合t.join()またはt1.join()私はコンパイルエラーに次取得

t.join() cannot be resolved 

私はただ単純にこれらの2つのケースで起こって、どのようにt.join()解決できませんでしたされたものを得ることはありません。

その上に私の研究これまで

私は、コンパイラは与えられた値が呼び出し可能であるかどうかを考え出しただろうか把握しようとかなりの時間を費やしています。 find out if a C++ object is callable メンバー検出のイディオムのために多くの意味がありましたが、gccのソースを確認したところ、これを理解するために機能的なヘッダー/ライブラリのstd::_Bind_simpleが使われているようでした。しかし、それは私の質問を解決しませんでした。 それから、この投稿how std::thread constructor detects rvalue reference?は同様の質問をしましたが、答えは私には意味がありませんでした。

援助の任意の並べ替えは、非常にローカルスコープ内の関数宣言を作っていたものを私がやっていた@ Jaroda42へ

+2

ローカルスコープ内での関数の宣言。 – Jarod42

+1

ああ!私は最も困惑する犠牲者であった。可能であれば、この場合、解析がどうやって動いているかを詳しく調べることができます。 –

+0

@NeilButterworth:私はそれを解析するための他の方法を見ないので、私は最も厄介な解析をしません:) – Jarod42

答えて

3

感謝を理解されるであろう。関数はt戻り値の型であることはstd::threadとクラスタイプTestているパラメータもされて

std::thread t(Test); 

これは本当に愚かでしたが、これは長い時間の間言語が残った場合に得られるものです。

関連する問題