为什么以下代码有效呢?
struct A {
std::vector<A> subAs;
};
Run Code Online (Sandbox Code Playgroud)
A是不完整的类型,对吧?如果有一个A*s的矢量我会理解.但在这里,我不明白它是如何工作的.它似乎是一个递归的定义.
对于我的一个项目,我真正想要做的是(将其简化为最低限度);
struct Move
{
int src;
int dst;
};
struct MoveTree
{
Move move;
std::vector<MoveTree> variation;
};
Run Code Online (Sandbox Code Playgroud)
我必须承认,我认为不可能直接这样做,我认为MoveTree中的MoveTree矢量将被禁止.但无论如何我都试过了,它的效果非常好.我正在使用Microsoft Visual Studio 2010 Express.
这是便携式吗?这是好习惯吗?我有什么可担心的吗?
编辑:我问了第二个问题,希望能找到一个好方法.