作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个错误
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/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!