将数据添加到现有类,而无需继承、映射或修改类
Add data to an existing class without inheritance, maps or modification of the class
类可以是任何东西(非pod,可能有虚函数)。
我们不能修改类的源代码。
- 有一个对创建对象的工厂方法的控件
- 在堆上重新分配的对象
- 创建后不复制对象
- 在编译时知道哪些类需要额外的数据
使用示例:
void f(ThirdPartyClass *o)
{
MyData *d = getData(o);
...
}
可能的解决方案是在构造ThirdPartyClass
类型的对象时创建包装结构:
struct Wrapper
{
ThirdPartyClass o;
MyData d;
};
但是如何实现MyData* getData(ThirdPartyClass *o)
功能呢?使用offsetof
宏从ThirdPartyClass*
获取到Wrapper*
是不正确的。有办法吗?
我可能会使用"面向数据库"的过程。假设您已将包装器注册到向量中,您可以执行以下操作:
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 的 vecotor。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 继承函数的重载解析
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 继承期间显示未知行为的子类
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 将数据添加到现有类,而无需继承、映射或修改类
- 在visual c++中从无序映射继承时,模板参数的sizeof()不正确
- C++-智能指针的矢量映射-所有这些都继承自同一基类
- 所有从同一类继承的对象的映射,调用对象方法而不是父对象;c++
- 为什么继承顺序或映射会影响 vftable 的下标?(对于 VSC 表示C++)
- 如何在 C 中映射继承的C++结构
- 映射继承
- 具有多重继承的消息映射MFC:如何避免警告C4407和运行时崩溃
- 消息映射MFC:继承多个消息映射
- C++使用模板和继承创建函数映射
- 使用继承的类作为映射值
- C++ 多态性 - 继承类的映射