静态模板成员函数的显式实例化一直编译失败,提示信息为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 给出了一些有用的提示后:在类声明中不允许显式实例化模板函数吗?