私は関数を持っています:
template<class T>
static string
format(T ui, T sentinal, char listSeparator)
{
stringstream s;
if (ui == sentinal)
{
s << "n/a" << listSeparator;
}
else
{
s << ui << listSeparator;
}
return s.str();
}
関数が呼び出された方法は次のとおりです。
output << format(field1,Backend::NA_Value, csvSeparator);
output << format(field2,Backend::NA_Value, csvSeparator);
/// ...etc
以前 はfield1
、field2
タイプはでしたunsigned int
。これらのタイプをに変更することが決定されましたunsigned long long
。しかし、コンパイルエラーが発生します:
std::string format(T,T,char)' : template parameter 'T' is ambiguous
main.cpp(39) : see declaration of 'format'
could be 'Juint'
'unsigned __int64'
その理由は何ですか?NA_Value?それは次のように定義されています:
static const Juint NA_Value = (Juint) -1;
typedef unsigned int Juint
テンプレートTを判別できませんか?!コンパイラはどこから__int64について決定しますか?