gpt4 book ai didi

c++ - 使用必须知道其容器的对象。想要避免烦人的代码重复

转载 作者:行者123 更新时间:2023-11-28 03:20:34 25 4
gpt4 key购买 nike

我有树。它提供空间分区服务(不仅仅是 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_XXX.data.reset(new T(node_XXXX.

) 中重复 node_XXX

最佳答案

模板怎么样:

#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)

关于c++ - 使用必须知道其容器的对象。想要避免烦人的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15560470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com