我继承了一个最初用C编写的大应用程序(但同时还增加了很多C++)。由于历史原因,该应用程序包含很多无效指针。在你开始窒息之前,让我解释为什么这样做。如何摆脱空指针
该应用程序包含许多不同的数据结构,但它们存储在'通用'容器中。现在我会为它使用模板化的STL容器,或者我会为所有数据结构提供一个通用的基类,以便容器可以存储指向基类的指针,但是在[良好]旧C日,唯一的解决方案是将结构指针转换为void指针。
此外,还有大量的代码,在这些空隙指针工作,并且使用非常奇怪Ç结构中C.
我现在再加工中的应用,并试图效仿多态性摆脱的空洞的指针。为所有数据结构添加一个通用基类并不困难(工作几天),但问题是代码充满了如下所示的构造。
这是数据是如何存储的一个例子:
void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
这是多么数据的例子又是牵强:
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
其实我是想取代所有的空隙指针与一些智能指针(引用计数),但我找不到自动化的技巧(或至少)帮助我摆脱所有指向void指针的指针。
有关如何查找,替换或以任何可能的方式与这些转换进行交互的任何提示?
我真的相信这样做不会自动做到这一点。一个接一个...... – INS 2010-06-11 21:01:34
存储和获取函数对'datatype'做什么?他们是在对结构进行盲目复制还是仅仅存储该空指针? – 2010-06-11 21:03:50
数据类型用于将所有相同数据类型的数据一起存储,并对数据类型执行一些“通用”逻辑。如上所述,它模拟普通C中的多态性。 – Patrick 2010-06-11 21:13:23