私はもともと C で書かれた大きなアプリケーションを継承しました (ただし、その間に多くの C++ も追加されました)。歴史的な理由により、アプリケーションには多数の void ポインターが含まれています。窒息し始める前に、なぜこれが行われたのかを説明させてください.
アプリケーションにはさまざまなデータ構造が含まれていますが、それらは「汎用」コンテナに格納されています。最近では、テンプレート化された STL コンテナーを使用するか、すべてのデータ構造に共通の基本クラスを与えて、コンテナーが基本クラスへのポインターを格納できるようにしますが、[良い?] 古い C 時代には、唯一の解決策はstruct-pointer を void-pointer にキャストします。
さらに、これらの void ポインターで機能するコードが多数あり、C でポリモーフィズムをエミュレートするために非常に奇妙な C 構造を使用します。
私は現在、アプリケーションを作り直しており、void ポインターを取り除こうとしています。すべてのデータ構造に共通の基本クラスを追加するのはそれほど難しくありません (数日かかります) が、問題は、コードが以下に示すような構造でいっぱいであることです。
これは、データの保存方法の例です。
void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
これは、データが再度フェッチされる方法の例です。
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
実際には、すべての void ポインターをいくつかのスマート ポインター (参照カウント) に置き換えたいのですが、自動化するためのトリックが見つかりません (または少なくとも) void- との間のすべてのキャストを取り除くのに役立ちます。ポインター。
これらの変換を見つけたり、置き換えたり、何らかの方法で操作したりするためのヒントはありますか?