2017-05-15 24 views
2

これは簡単な質問ですが、私はどこでも特定の回答を見つけることができません!<int(int)>は、関数テンプレートでは何を意味していますか?

C++ 11内のスレッドのためのテストコードを通って行くと、このテンプレート関数なステートメントの意味を理解していない:

packaged_task<int(int)> task1(&myComputation); 

ない「int型(int型)」は、このコードでは何を意味するのか確認してください。大括弧<に渡されるのは、テンプレート定義に渡されるもののタイプであると一般的に理解しています。これはある種の型キャストですか?

ありがとうございます!

答えて

4

ここで、int(int)は、1つのパラメータ(int)をとり、intを返す関数への関数ポインタの型シグネチャを表します。だから、もし私が書いていたら:

int myFunction(int value) { 
    std::cout << value << std::endl; 
} 

std::packaged_task<int(int)> myPackagedTask{&myFunction}; 

これで、packaged_taskはmyFunctionへの関数ポインタを含むようになりました。次はエラーです。

int mySecondFunction(int value, int secondValue) { 
    std::cout << value << " : " << secondValue << std::endl; 
} 
std::packaged_task<int(int)> myPackagedTask{&mySecondFunction}; //compile error, mySecondFunction does not match signature int(int) 
+0

ありがとうございます!だから一般的に、parantheses part()は戻り値の型ですか? – jojeyh

+1

問題ありません!括弧の部分は実際に関数への引数を表し、かっこの外側のパラメータは関数の戻り値の型を表します。したがって、何も返さない関数では、テンプレートパラメータがであることが一般的です(この関数は1つのint引数をとり、voidを返します)。 –

関連する問題