4

我有两个功能,如下所示

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

4

2 回答 2

3

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

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

活生生的例子

于 2013-11-02T08:48:39.437 回答
1

尝试编码

myFunction(2U);

或者

myFunction((unsigned)2);

文字2int(非unsigned int)类型。并且int不是一个类或一个类型->func()

并且也许专门化模板unsigned不是定义一个myFunction(unsigned int)

于 2013-11-02T08:42:33.830 回答