汎用プログラミングの特例
1、テンプレート関数を作成するとき、通常はパラメータに汎用タイプが使用されます.これにより、汎用関数を呼び出すときに直接使用すればいいです.汎用関数にパラメータがなく、関数内部に汎用タイプが使用されている場合、直接呼び出すとエラーが発生し、関数名の後に汎用タイプを明確に示す必要があります.1つ目の場合、コンパイラはパラメータから汎用のタイプを得ることができるので、明確に指定する必要はありませんが、2つ目の場合、コンパイラはパラメータから汎用のタイプを得ることができないので、明確に指定しなければならないと思います.例を次に示します.
#include <stdio.h>
template<typename T>
T Test() {
T aa;
return aa;
}
template<typename T>
T Test3(int) {
}
template<typename T>
T Test1(const T& left, const T& right) {
return left + right;
}
int main(int argc, char** argv) {
Test(); //error
Test<int>(); //correct
Test1(2, 3); //correct
Test1<int>(2, 3); //correct
Test3(1); //error
Test3<int>(1); //correct
}