将数据添加到现有类,而不继承,映射或修改类

时间:2017-06-12 06:44:19

标签: c++

这个类可以是任何东西(非pod,可能有虚函数)。

我们无法修改该类的源代码。

  • 可以控制创建对象的工厂方法
  • 在堆上重新分配的对象
  • 创建后不会复制对象
  • 在编译时知道哪些类需要额外的数据

用法示例:

onOptionItemSelected(Menu item)

可能的解决方案是在构造void f(ThirdPartyClass *o) { MyData *d = getData(o); ... } type:

的对象时创建包装器结构
ThirdPartyClass

但是如何实现struct Wrapper { ThirdPartyClass o; MyData d; }; 功能呢?使用MyData* getData(ThirdPartyClass *o)宏从offsetof转到ThirdPartyClass*是不正确的。有办法吗?

1 个答案:

答案 0 :(得分:0)

我可能会使用"面向数据库"程序。假设您已将Wrappers注册到矢量中,您可以执行以下操作:

std::vector<Wrapper> containers;
MyData* getData(ThirdPartyClass *o) {
 for(int i = 0; i < containers.size(); i++) {
    if(&containers[i] == o)
       return &containers[i].d;
 }
}

也许另一种方法是将ThirdPartyClass *parent存储到您的MyData对象中,然后您可以遍历MyData的文件。