C++ - 循环依赖(在模板化基类中使用子类的内部类型)

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

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

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

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

当我尝试实例化 B 时,出现编译器错误:“C”不是“B”的成员 (MSVC) 或 Invalid use of incomplete type 'struct B' (海湾合作委员会)。
更改示例以使其正常工作的最佳方法是什么?

最佳答案

struct B_base { struct C {}; };
strucr B : A<B_base>, B_base { };

关于C++ - 循环依赖(在模板化基类中使用子类的内部类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153424/

相关文章:

c++ - 从 g++ 修改 make 文件以使用 Visual Studio C++

c++ - 比较参数包?扩展语法?

c++ - 友元函数中的类型不完整

c++ - C++/类中相互依赖的循环依赖

google-sheets - 绕过 Google 电子表格中的循环引用

c++ - 如何记录整个项目中哪个线程从哪个类调用哪个函数以及在什么时间调用?

c++ - Makefile 奇怪的错误

c++ - 定义概念时是否允许 OR (`||` )?

C++ 获取可变参数模板中的多个元素

c++ - 解决涉及 C++ 状态机的前向声明问题