调用其他专业功能
Calling specialized function from other specialized one
我有一个错误
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
被忽略)。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 如何从其他功能C++访问参数?
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- char* 除了作为C++中的指针之外,还有其他功能吗?
- 如何让线程继续并启动其他功能 - C++使用 OpenMP?
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 如何使用使用代替定义或其他C++功能
- 在 SCIP 中集成来自其他源代码的功能
- 传递多个参数的功能,该函数将类包含到其他函数
- 从Baseclass获取其他功能
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- 如何与 PlaySound 同时执行其他功能?
- 在递归功能中,我如何跳到堆栈上的其他功能调用
- 在Google测试框架中,如何期望函数调用或其他功能调用
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- 我想制作一个程序来执行一些用户制作的功能,例如加法和其他东西
- 您如何共享Java功能而不提供其他源代码
- 无法从类中的其他功能访问同一类的变量
- 模板功能以映射特定类型,并保留所有其他不变的