我有两个功能,如下所示
template<typename T>
unsigned int myFunction(T myelement)
{
myelement->func();
return 2;
}
void myFunction(unsigned int myelement)
{
}
我正在使用以下代码
myFunction(2);
Visual Studio 2012 抱怨“int 没有 ->func()”。为什么不使用 unsigned int 版本?
我有两个功能,如下所示
template<typename T>
unsigned int myFunction(T myelement)
{
myelement->func();
return 2;
}
void myFunction(unsigned int myelement)
{
}
我正在使用以下代码
myFunction(2);
Visual Studio 2012 抱怨“int 没有 ->func()”。为什么不使用 unsigned int 版本?
您误读了错误消息。编译器不使用该函数,它正在实例化它以确定它是否是候选函数。您需要禁用不合适类型的实例化:
template<typename T>
typename std::enable_if<!std::is_fundamental<T>::value, unsigned int >::type
myFunction( T myelement )
{
// ...
}
尝试编码
myFunction(2U);
或者
myFunction((unsigned)2);
文字2
是int
(非unsigned int
)类型。并且int
不是一个类或一个类型->func()
并且也许专门化模板而unsigned
不是定义一个myFunction(unsigned int)