C++ 模板的转发声明

C++ 模板的转发声明,c++,templates,C++,Templates,我不喜欢使用转发声明,因为: struct A; struct B { A* a; } // Implementation 我习惯于这样做: struct B { struct A* a; } 但是,我在尝试使用模板类时遇到了问题: template<typename T> struct A { struct B<T>* _t; }; template<typename T> struct B { T _t; }; 如何

我不喜欢使用转发声明,因为:

struct A;

struct B
{
   A* a;
}

// Implementation
我习惯于这样做:

struct B
{
   struct A* a;
}
但是,我在尝试使用模板类时遇到了问题:

template<typename T>
struct A
{
    struct B<T>* _t;
};

template<typename T>
struct B
{
    T _t;
};
如何实现这一点?

分两步

步骤1:在结构A之前定义结构B

步骤2:像转发声明一样。

两个步骤

步骤1:在结构A之前定义结构B


第2步:像转发声明一样。

用代码进行双Vigneshwaren注释: 模板 结构B { T_T,; };

模板
结构A
{
结构B*\u t;
};

带代码的双Vigneshwaren注释: 模板 结构B { T_T,; };

模板
结构A
{
结构B*\u t;
};

真正的问题是:为什么不喜欢转发声明?他们是这样说的:“这是一个有效的类型,即使你还没有看到定义”。为什么要避免使用它们?真正的问题是:为什么不喜欢转发声明?他们是这样说的:“这是一个有效的类型,即使你还没有看到定义”。为什么要避免使用它们?
test.cpp:4:12: error: 'B' is not a template
test.cpp:8:8: error: 'B' is not a template type
template<typename T>
struct A
{
    struct B<T>* _t;
};