作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑一个现有的 C++ 类层次结构:一个根类,许多子类形成有向无环图。
我想向根类添加一个方法,并可能在某些子类中覆盖它。 但问题是我禁止修改这些现有类(第 3 方库、项目策略、封闭源代码等)。
混合/扩展类将是一个很好的解决方案。但这在 C++ 中并非易事。
快速而肮脏的解决方案是编写一个函数来调度对象的类型,使用dynamic_cast 运算符,并对层次结构的每种类型执行所需的代码。但这是一种不好的做法,因为它容易写错,它破坏了封装,并且不支持安全的 future 更改。
我正在考虑在某处使用定义 {rtti type id, function to call}"维护某种哈希表,并将其用作一个假 VTable 用于我要编写和覆盖的函数。但我不确定它是否会更好......
还有其他想法吗?运行时 VTable 更改?模板元编程解决方案?其他?
不要忘记:我绝对不能更改原始类(无论是 header 还是实现)。
最佳答案
如果您不能改变原始层次结构,那么模板元编程不太可能有所帮助。请记住,它基于编译时信息。
更改 vtable 似乎是一个非常糟糕的主意,它显然是不可移植的,并且假定您对它的物理布局有所了解......即使您做对了,这也将是一场维护噩梦。
我很喜欢 std::map<type_info, Func>
主意。 std::type_info::before
为您提供实现所需的一切(不要依赖名称或地址)。
关于c++ - 如何在 C++ 中表示基本的 Mixin 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676776/
我是一名优秀的程序员,十分优秀!