C ++模板比int-> unsigned转换更好?

时间:2013-11-02 08:39:34

标签: c++

我有两个功能,如下面的

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版本?

2 个答案:

答案 0 :(得分:3)

您误读了错误消息。编译器不使用函数,它实例化它以确定它是否是候选函数。您需要为不合适的类型禁用实例化:

template<typename T>
typename std::enable_if<!std::is_fundamental<T>::value, unsigned int >::type
myFunction( T myelement )
{
    // ...
}

Live example

答案 1 :(得分:1)

尝试编码

myFunction(2U);

myFunction((unsigned)2);

文字2属于int(非unsigned int)类型。 int不是具有->func()

的类或类型

unsigned可能specialize the template而不是定义myFunction(unsigned int)