c++ - 从其他专门函数调用专门函数

标签 c++ templates visual-c++

我有一个错误

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 template\n";
     return InnerFunc(key);
}

template<>
inline const int FuncTemplateTest::OuterFunc<std::string>(const std::string &key) const 
{
    std::cout<<"Outer special\n" << 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 template\nTemplate key\n";
     return 0;
}   

template<>
inline const int FuncTemplateTest::InnerFunc<std::string>(const std::string &key) const
{
    std::cout << key << '\n';
    return 1;
}

最佳答案

我认为问题的原因是您在 OuterFunc 的代码中使用了特定的特化后,为 InnerFunc 定义了显式特化。

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


单独说明:你的函数的返回类型是const int,这不是不正确的,但也很无用(const在返回基本数据类型时被忽略复制)。

关于c++ - 从其他专门函数调用专门函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357116/

相关文章:

php - 在 PHP 中获得基本模板的最快方法是什么,如 Struts Tiles?

java - 使用模板模式设计通用流程

c++ - 关于推导转换函数模板参数的几个问题

c++ - 如何使用vc++找出当前线程堆栈上还剩下多少空间?

c++ - 在 VC++ 中将 TCHAR 转换为 LPWSTR?

c++ - 重复符号 XCode g++-4.2

c# - 使用鼠标arduino通过PC控制两个伺服系统

c++ - 如何使 boost::spirit 解析器和词法分析器能够处理包含文件

c++ - 如何模拟 boost 抛出异常?

c++ - _msize 调试断言失败