2
誰かがコンパイラは2例を以下に何異なる私に言うことはできますか?は、戻り値の型に機能をオーバーロード? (再訪)
#include <cstdio>
using namespace std;
template <typename TReturn, typename T>
TReturn convert(T x)
{
return x;
}
int main()
{
printf("Convert : %d %c\n", convert<int, double>(19.23), convert<char, double>(100));
return 0;
}
と
int convert(double x)
{
return 100;
}
char convert(double x)
{
return 'x';
}
int main()
{
printf("Convert : %d %c\n", convert(19.23), convert(100)); // this doesn't compile
return 0;
}
最初のケースは、関数のオーバーロードを持っていませんか?コンパイラは、テンプレート関数にこの呼び出しを検出すると
無効であなたの第二ケース。コンパイルする唯一の理由は、 'convert'ではなく' covert'をタイプしたからです。同じ名前の2つの関数を宣言することはできません。戻り値の型だけが異なります。 –