【发布时间】:2011-06-29 22:16:39
【问题描述】:
昨天我问了以下question,为了方便,这里转载;
“对于我的一个项目,我真正想做的是这个(将其简化到最低限度);
struct Move
{
int src;
int dst;
};
struct MoveTree
{
Move move;
std::vector<MoveTree> variation;
};
我必须承认,我认为直接执行此操作是不可能的,我认为 MoveTree 中的 MoveTree 向量将被禁止。但无论如何我都试过了,效果很好。我正在使用 Microsoft Visual Studio 2010 Express。
这是便携的吗?这是好习惯吗?我有什么需要担心的吗?”
基本上社区的回答是否定的,我不能这样做,标准禁止这样做,所以它有效的事实意味着我只是幸运。
所以我的新问题是。如何在合法的 C++ 中实现我想要的简单功能,而又不增加一大堆令人讨厌的复杂性和痛苦?
【问题讨论】:
-
你也可以使用recursive_wrapper,但是如果和
vector一起使用的话效率很低,因为堆流量很大。 -
你为什么删除了@Johannes 的答案?这是一种与@Cat Plus Plus 不同的方法,有一些优点和缺点:优点是您可以提供对向量的引用并保持用户代码基本不变,缺点是向量增长的处理成本更高.
-
@David 因为我觉得这里 recursive_wrapper 不好用-.-
标签: c++ design-patterns