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

C++ template better than a int->unsigned conversion?

本文关键字:unsigned 转换 更好 gt int- C++      更新时间:2023-10-16

我有两个函数,如下所示

template<typename T>
unsigned int myFunction(T myelement)
{
myelement->func();
return 2;
}
void myFunction(unsigned int myelement)
{
}

我正在使用以下代码

myFunction(2);

Visual Studio 2012抱怨"int没有->func()"。为什么它不使用无符号的 int 版本?

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

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

现场示例

尝试编码

myFunction(2U);

myFunction((unsigned)2);

文字2int(不是unsigned int)类型。int不是一个类或一个类型具有->func()

也许将模板专门用于unsigned,而不是定义myFunction(unsigned int)