我有一个场景图,所有节点都来自基类AbstractNode
。 AbstractNode
有一个registerChild
成员函数:
registerChild<T>(string name, shared_ptr<AbstractNode> * childMember)
用于以标准方式注册子项(以便可以在基类接口中列出和修改它们)。它基本上将名称/ child_pointer对添加到哈希。
因此,例如,类材料将被声明(缩短):
class Material : public AbstractNode
{
public:
Material() { registerChild(&color); }
private:
std_shared<Color> color;
}
Color是AbstractNode的另一个子类。
现在我想为AbstractNode实现一个复制构造函数。它必须复制已注册子项的列表,并更新子成员指针。我想避免在所有基类中重新实现复制构造函数。这可能吗?
我曾想过在this
和子指针之间处理指针偏移。但这两个实例之间是否保证不变?对我来说这似乎是一个很大的黑客...(而且我甚至确信在子类化时这不能保证)
谢谢,
艾蒂安