汎用プログラミングの特例


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
}