在cpp文件中实现模板专门化导致Template -id does not match错误
Template specialization implementation in cpp file causes template-id does not match error
考虑以下代码:
class Bar;
enum Values
{
ValA,
ValB, // ...
};
template< typename T >
struct Foo : virtual public Bar
{
};
template<>
struct Foo< ValA >
{
void doSomething();
};
如果我在头文件中定义了doSomething()
的实现,当我使用Foo::doSomething()
时,程序不会报错。但是,如果我将实现移动到cpp文件中,如下所示,我会得到一个错误:
template<>
void Foo< ValA >::doSomething()
{
// ...
}
错误:
error: template-id 'doSomething<>' for 'void Foo<(Values)0u>::doSomething()' does not match any template declaration.
我不知道为什么会失败。我相信,将专门的实现移到cpp文件中应该不成问题。我以前做过这个
有几个问题。
@dyp在你的问题的评论部分指出了一个。您需要使用:
void Foo< ValA >::doSomething()
{
}
代替
template<>
void Foo< ValA >::doSomething()
{
}
另一个是你必须将类模板更改为:
template< int T >
struct Foo : virtual public Bar
{
};
如果使用typename作为模板参数,则不能使用ValA
创建Foo
的专门化。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 传递给std::function template的template参数究竟代表什么
- 在template中使用std::variant的template函数
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- template-id 与任何模板声明 GNU gcc 编译器都不匹配
- 具有重载<<运算符的简单模板类失败,"Invalid use of template-id"
- 在类模板定义中使用template-name代替template-id
- c++模板函数错误:template-id不匹配任何模板声明
- 非类-name c++ 11类型-name是一个simple-template-id
- 在cpp文件中实现模板专门化导致Template -id does not match错误