调用其他专业功能

Calling specialized function from other specialized one

本文关键字:功能 其他 调用      更新时间:2023-10-16

我有一个错误

C2910: 'TEMPLATE_TEST::FuncTemplateTest::InnerFunc' : cannot be explicitly specialized, 

在编译下面的代码时。有两个模板函数,它们俩都是专业的。当我在专用外部的呼叫中删除对InnerFunc的呼叫时,一切正常工作。那么,问题在哪里?(我正在使用MS VS 2008。)

class FuncTemplateTest {
public:
    template<typename T>
    const int OuterFunc(const T& key) const;
private:
    template<typename T>
    const int InnerFunc(const T& key) const;
};
template<typename T>
inline const int FuncTemplateTest::OuterFunc(const T &key) const 
{
     std::cout<<"Outer templaten";
     return InnerFunc(key);
}
template<>
inline const int FuncTemplateTest::OuterFunc<std::string>(const std::string &key) const 
{
    std::cout<<"Outer specialn" << key << 'n';
    InnerFunc(key); //remove this line to compile!!!
    return 1;
}
template<typename T>
inline const int FuncTemplateTest::InnerFunc(const T &key) const
{
     std::cout << "Inner templatenTemplate keyn";
     return 0;
}   
template<>
inline const int FuncTemplateTest::InnerFunc<std::string>(const std::string &key) const
{
    std::cout << key << 'n';
    return 1;
}

我相信问题的原因是,您为InnerFunc定义了该特定专业化的明确专业化,已在OuterFunc的代码中使用。

如果您OuterFunc 的定义之前移动InnerFunc的定义,则应该没问题。(在GCC上,这确实解决了问题。)


单独注意:您的函数的返回类型是const int,这不是不正确的,但也很无用(当基本数据类型通过复制返回时,const被忽略)。