2
我在模板编程初学者,我使用下面的模板函数试图避免重复代码:为什么这个调用重载函数模糊?
template <class T>
void foo(T iInteger) {
// ... same algorithm for all integer types
std::to_string(static_cast<T>(iInteger)); // C2668: ambiguous call to overloaded function
// ... end of algorithm
}
我foo
功能将只与原始整数类型调用。 我当时天真地认为static_cast
本来足以告诉编译器哪个超载使用std::to_string()
,但这似乎还不够,因为我仍然得到C2668: ambiguous call to overloaded function
。我错过了什么?是否可以避免为所有原始整数类型重复相同的代码,同时仍然调用适当的std::to_string
过载?
你作为模板参数传入了什么?我记得MSVS有这个问题,但不是GCC,因为MSVS只实现了一半的选项。你可以看看你有的头,并亲自看看他们在那里提供了什么。 – chris
我将它用于原始整数类型,long,int,short和它们的未签名版本。 –
我看到std :: to_string没有我期望的所有重载,它只有long long或unsigned long long。我想这就是问题......那是正确的@chris? –