从模板参数中嵌套的类模板继承[重复]

问题描述 投票:0回答:1

我有一个特征类,它指定类层次结构的基类和派生类。我正在尝试从嵌套在特征类中的类模板继承。

这是一个小例子:

template<typename GraphTypes, bool IsNode>
class Graph : public GraphTypes::BaseGraph<IsNode>
{};

class MyGraphTypes {
public:
    template<bool IsNode>
    class BaseGraph {};
};

Graph<MyGraphTypes, true> myGraph;

它可以在 GCC 上编译,但不能在 Clang 或 MSVC 上编译:

  • MSVC:
    error C2143: syntax error: missing ',' before '<'
  • 叮当:
    error: missing 'template' keyword prior to dependent template name 'GraphTypes::BaseGraph'

我在 MSVC 中确实需要它。这是一个错误或限制吗?或者我可以做些什么来让 MSVC 理解代码?

在这里你可以尝试一下:https://godbolt.org/z/8rTzGzxPG

c++ crtp
1个回答
0
投票

Clang 在这里提供了比 MSVC 更好的错误消息。

BaseGraph
是一个依赖类型,因为它依赖于另一个模板参数。对于这些,您需要添加一个额外的
typename
,如下所示:

template<typename GraphTypes, bool IsNode>
class Graph : public GraphTypes::template BaseGraph<IsNode>
{};

这在 MSVC 上也能很好地编译。

© www.soinside.com 2019 - 2024. All rights reserved.