编译GCC时出错部分模板特化,但不是MSVC

时间:2011-11-05 17:47:53

标签: c++ templates visual-c++ gcc syntax-error

以下代码编译了精细的MSVC,但是在构建GCC时会出现很多错误:

#define FORCE_INLINE inline
#define CREF(A) const A&

template <class F>
class RDOFunCalcStd: public RDOFunCalc
{
...
template <class T>
FORCE_INLINE T getParam(CREF(LPRDORuntime) pRuntime, ruint paramNumber);

template <>
FORCE_INLINE double getParam<double>(CREF(LPRDORuntime) pRuntime, ruint paramNumber)
{
    return pRuntime->getFuncArgument(paramNumber).getDouble();
}

template <>
FORCE_INLINE int getParam<int>(CREF(LPRDORuntime) pRuntime, ruint paramNumber)
{
    return pRuntime->getFuncArgument(paramNumber).getInt();
}
...
};

错误列表:

  

错误:非命名空间范围'class rdoRuntime :: RDOFunCalcStd'中的显式特化

     

错误:主模板声明中的template-id'getParam'

     

错误:非命名空间范围'class rdoRuntime :: RDOFunCalcStd'中的显式特化

     

错误:主模板声明中的template-id'getParam'

     

错误:'int rdoRuntime :: RDOFunCalcStd :: getParam(const rdoRuntime :: LPRDORuntime&amp;,ruint)'无法重载

     

错误:使用'double rdoRuntime :: RDOFunCalcStd :: getParam(const rdoRuntime :: LPRDORuntime&amp;,ruint)'

应该怎样做才能解决错误?

1 个答案:

答案 0 :(得分:3)

见这个

Article from Herb Sutter

它解释了原因。简而言之,C ++不支持函数模板特化。