私はコードを書いていて、今まで次のような構造を使用していました。
struct s{
enum Types { zero = 0, one, two };
unsigned int type;
void* data;
}
さまざまなクラスのデータを格納するための一般的な構造が必要であり、それをstd :: vectorで使用したかったので、テンプレートを使用できません。より良いオプションは何ですか:ユニオンまたはvoidポインター?
ボイドポインタは必要なだけのスペースを割り当てますが、c ++は何らかの理由で強い型付き言語であり、これらのデータを使用する必要がある場所にキャストすることは、c++コードを設計する方法ではありません。私が読んだように、代替手段がない限り、voidポインタは使用されるべきではありません。
その代替案は組合である可能性があります。これらはC++に付属しており、voidポインターと非常によく似て、すべてのメンバーに同じメモリスペースを使用します。ただし、価格が高くなります。割り当てられたスペースは、ユニオンで最大の要素のサイズであり、私の場合、サイズ間の違いは大きくなります。
どちらの方法でも必要なことを実行できるため、これはかなり文体的で「正しい言語を使用する」問題ですが、適切に様式化されたc ++コードがその無駄なメモリを補うことができるかどうかを判断できません(最近のメモリはそれほど大きくありませんが)懸念)。