【发布时间】:2009-01-08 19:38:33
【问题描述】:
静态模板成员函数的显式实例化始终无法编译并显示消息error C2785: 'at_Intermediate CUtil::convert_variant(const VARIANT &)' and '<Unknown>' have different return types
当我用非静态成员函数创建一个对应的类时,编译器喜欢我。
// utility class - static methods
struct CUtil {
template< typename at_Intermediate > static at_Intermediate convert_variant( const VARIANT &v ) ;
template<> static VARIANT convert_variant<VARIANT >( const VARIANT &v ) { return v; } //
template<> static double convert_variant<double >( const VARIANT &v ) { return v.dblVal; }
template<> static long convert_variant<long >( const VARIANT &v ) { return v.lVal ; }
template<> static BSTR convert_variant<BSTR >( const VARIANT &v ) { return v.bstrVal; }
};
这是一个组合问题:
为什么编译器会抱怨一个函数“未知”,而它显然是已知的?
触发此消息的原因 - 当函数设为全局或非静态时它会消失。
编辑:
经过 Josh 的一些有用提示:是否不允许在类声明中显式实例化模板函数?
【问题讨论】: