我有两个功能,如下面的
template<typename T>
unsigned int myFunction(T myelement)
{
myelement->func();
return 2;
}
void myFunction(unsigned int myelement)
{
}
我正在使用以下代码
myFunction(2);
visual studio 2012抱怨“int没有 - &gt; func()”。为什么不使用unsigned int版本?
答案 0 :(得分:3)
您误读了错误消息。编译器不使用函数,它实例化它以确定它是否是候选函数。您需要为不合适的类型禁用实例化:
template<typename T>
typename std::enable_if<!std::is_fundamental<T>::value, unsigned int >::type
myFunction( T myelement )
{
// ...
}
答案 1 :(得分:1)
尝试编码
myFunction(2U);
或
myFunction((unsigned)2);
文字2
属于int
(非unsigned int
)类型。 int
不是具有->func()
unsigned
可能specialize the template而不是定义myFunction(unsigned int)