0

私は木を持っています。BSP だけでなく、スペース パーティショニング サービスを提供します。ツリー内のすべてのノードは、(unique_ptr を介して) ポリモーフィック オブジェクトを所有できます。これらのオブジェクトは、割り当てられたノードを認識する必要があります。したがって、ノードのオブジェクトを作成するときは、ノード参照をコンストラクターに渡す必要があります。

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

通常、1 つだけでなく、複数のオブジェクトを作成 (および対応するノードに割り当てる) 必要があります。

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_XXXでの繰り返しは避けたいnode_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 に答える