我继承了一个最初用 C 编写的大型应用程序(但同时也添加了很多 C++)。由于历史原因,该应用程序包含大量空指针。在你开始窒息之前,让我解释一下为什么这样做。
该应用程序包含许多不同的数据结构,但它们存储在“通用”容器中。现在我会为它使用模板化的 STL 容器,或者我会给所有的数据结构一个通用的基类,这样容器就可以存储指向基类的指针,但是在 [good?] 旧 C 时代,唯一的解决方案是将结构指针强制转换为 void 指针。
此外,还有很多代码可以处理这些空指针,并使用非常奇怪的 C 构造来模拟 C 中的多态性。
我现在正在修改应用程序,并试图摆脱空指针。为所有数据结构添加一个通用基类并不难(几天的工作),但问题是代码中充满了如下所示的结构。
这是如何存储数据的示例:
void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
这是如何再次获取数据的示例:
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
我实际上想用一些智能指针(引用计数)替换所有 void 指针,但我找不到自动化(或至少)帮助我摆脱所有与 void 之间的强制转换的技巧-指针。
关于如何查找、替换或以任何可能的方式与这些转换交互的任何提示?