列表的不完整类型支持

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

我用类似于std::list的API实现了一个列表,但无法编译

struct A { my_list<A> v; };

列表具有一个基类,该基类具有成员base_node,该成员具有prevnext字段,并且node(从base_node派生)保留T值(即列表的模板参数)。编译错误是>

error: ‘node<T>::val’ has incomplete type
     T val;
       ^~~
note: forward declaration of ‘struct A’

我查看了GCC代码,似乎它们保存了一个大小为T的字节缓冲区,因此不确定其如何工作。 std::list如何设法在其节点中存储Aenter image description here

[更新]

struct A { };

template <typename T>
struct B : public A
{
    using B_T = B<T>;
    T t;
};

template <typename T>
class C
{
    using B_T = typename B<T>::B_T; // this fails to compile
    //using B_T = B<T>; // this compiles fine
};

struct D { C<D> d; };

我用与std :: list类似的API实现了一个列表,但是它无法编译struct A {my_list v; }; The list has a base class that has a member a base_node which has the prev and next ...

c++11 stl
1个回答
1
投票

在您的简化示例中

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