我有一个功能:
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?