【发布时间】:2013-12-27 09:14:18
【问题描述】:
目前的情况是这样的:我正在经历一些代码重构
如果你看图像,目前的情况是我有一个虚拟方法setData(int ID);
现在我们想把它改成虚拟方法setData(dataObj aObj);
但是这样做是一个漫长的过程,因为我们的foo 对象已被大量类继承。所以,我们要逐步进行代码修改。
因此,我需要做的是检查其中一个继承的类是否已实现
setData(dataObj aObj) 调用该类,否则调用另一个先前的函数签名
setData(int ID); 问题更加复杂,因为FOO 类之前提供了默认的setData(int ID),而不是所有从FOO 继承的类,因此可能/可能不需要实现setData,它们的实现确实有所不同疯狂地。
我已经看过了 How to Check if the function exists in C/C++ 不幸的是,这并不能回答我的问题。
在我看到人们使用模板的一些帖子中,这不是我的选择,因为这需要在运行时完成。其他选项似乎建议将 /mangling 技巧与 GCC 等联系起来。我需要将我的代码构建为独立于平台和编译器。所以这也不是一个选择。
还有更多建议,唯一可能的解决方案似乎是 https://stackoverflow.com/a/8814800/1376317 但我真的不确定如何在我的工作流程中实现这一点,或者这是否与我的问题有关。
【问题讨论】:
-
你不能。相反,修复你过于复杂的设计(这很有趣;你自己提到过:“问题因为……而变得更加复杂”)。
-
出于好奇:运行时必须发生这种情况的原因是什么?
-
我看到的那个 mspaint 恐怖吗?只是为了您自己的理智,请查看inkscape 以获取此类图表。至少,在您意识到最终图像中的文字太小后,您几乎可以立即调整它们的大小。
-
另外,为了确保您没有遇到xy problem,请提供一些关于您实际尝试做的事情以及为什么选择这个特定(不可能的)解决方案的详细信息。
-
ID和aObj从哪里来的Init方法?