【问题标题】:C++ - circular dependence (using inner type of subclass in templated base class)C++ - 循环依赖(在模板化基类中使用子类的内部类型)
【发布时间】:2012-08-28 05:49:01
【问题描述】:

我在模板类中遇到循环依赖问题。有一个代码示例:

template <typename T> struct A 
{
  typedef typename T::C D;
  //typename T::C c;
};

struct B : public A<B>
{
  struct C {};
};

当我尝试实例化 B 时,我得到一个编译器错误:'C' is not a member of 'B' (MSVC) 或 不完整类型 'struct B' 的使用无效 (GCC)。
更改示例以使其正常工作的最佳方法是什么?

【问题讨论】:

  • 你不能。提供一个稍微更完整的示例来说明您要解决的问题,我们可以考虑重构代码。

标签: c++ templates circular-dependency crtp incomplete-type


【解决方案1】:
struct B_base { struct C {}; };
strucr B : A<B_base>, B_base { };

【讨论】:

  • 如果 A 是一个将参数类型 T 放在成员声明中的 CRTP 模板,则可能没有帮助。在这种情况下,您可能只需要将 C 设置为一个额外的模板参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2018-09-07
  • 1970-01-01
相关资源
最近更新 更多