对于我的一个项目,我真正想要做的是(将其简化为最低限度);
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.
这是便携式吗?这是好习惯吗?我有什么可担心的吗?
编辑:我问了第二个问题,希望能找到一个好方法.
Naw*_*waz 29
C++标准(2003)明确指出,实例化具有不完整类型的标准容器会调用未定义的行为.
该规范在§17.4.3.6/ 2中说,
特别是,在以下情况下,效果未定义:
__ [..]
- 如果在实例化模板组件时将不完整类型(3.9)用作模板参数.
__ [..]
MoveTree是其定义内的不完整类型。该标准不保证实例类型不完整的STL模板的实例化。
使用指向 Vector 中类型的指针,这将是可移植的。
struct Move
{
int src;
int dst;
};
struct MoveTree;
struct MoveTree
{
Move move;
std::vector<MoveTree*> variation;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |