0

我有树。它提供空间分区服务(不仅仅是 BSP)。树中的每个节点都可以拥有(通过 unique_ptr)多态对象。这些对象需要知道它们被分配到哪个节点。因此,在为节点创建对象时,我必须将节点引用传递给构造函数。

node.data.reset(new t_Something(node));

通常我需要创建(并分配给相应的节点)多个对象,而不仅仅是一个。

node_a.data.reset(new t_Wing(node_a, /*wing args*/...));
node_h.data.reset(new t_Hall(node_h, /*hall args*/...));
node_b.data.reset(new t_Wing(node_b, /*wing args*/...));

我正在开发内容生成器,将来我会写很多这样的代码。我想避免重复node_XXXnode_XXX.data.reset(new T(node_XXXX

4

2 回答 2

1

模板怎么样:

#include <utility>    // for std::forward

template <typename T, typename N, typename ...Args>
N & add(N & node, Args &&... args)
{
    node.data.reset(new T(node, std::forward<Args>(args)...));
    return node;
}

用法:

add<t_Wing>(node_a);                // appends new t_Wing(node_a)
add<x_Wing>(node_b, arg1, arg2);    // appends new x_Wing(node_b, arg1, arg2)
于 2013-03-22T00:12:34.967 回答
1

有自己调用的构造函数data.reset,你已经在传递节点参数。

于 2013-03-22T00:20:39.053 回答