使用必须知道其容器的对象.希望避免恼人的代码重复
Using objects which must be aware of their container. Want to avoid annoying code repeats
我有一棵树。它提供空间分区服务(不只是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)
拥有调用data.reset
本身的构造函数,您已经传递了节点参数。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我希望定义两个具有相同代码的不同名称的库
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- 为赋值编写伪代码,并希望仔细检查它是否有意义
- 当我运行此代码时,它"stopped working"。我希望从 API 调用这个简单的函数
- 从 mfc 应用程序点击网络服务,并希望从网络服务登录方法读取用户代码返回
- 为希望编写 VB 代码的新人提供帮助
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 我希望程序打印数字 0 到 99,但是当我运行代码时,我看到 100 行 99
- 旧的OPENGL代码,希望使用glPushMatrix()
- 希望我的代码逐行将矩阵元素转换为向量,它只将矩阵的最后一行显示为向量
- RTC with Eclipse:是否希望将代码存储在完全配置的Eclipse项目中
- 使用必须知道其容器的对象.希望避免恼人的代码重复