は、私はこのようなクラスがあります。デストラクタでvoidポインタを削除するには?
class IncomingNetworkEvent {
private:
IncomingNetworkEventForGame event;
void* item;
public:
IncomingNetworkEvent();
~IncomingNetworkEvent();
IncomingNetworkEventForGame getEvent();
void setEvent(IncomingNetworkEventForGame event);
void* getItem();
void setItem (void* item);
};
そして、他のクラスのメンバ変数を
vector<IncomingNetworkEvent> m_incomingNetworkArray;
イベントは、私がIncomingNetworkEvent
とsetItem
(アイテムは、イベントに基づいて異なるタイプのものであってもよい作成しています
void*
)。
IncomingNetworkEvent
を作成した後、
m_incomingNetworkArray
に貼り付けました。
したがって、m_incomingNetworkArray.clear()
をクリアしたい場合があります。それはIncomingNetworkEvent
のデストラクタを呼び出しますが、私はvoid
の項目を削除する必要があります。それを削除するには、適切な型に型変換し直す必要があります。
1つの解決策は、イベントに応じてアイテムをタイプチェクします(どのイベントにどのタイプが含まれているかわかります)。しかし、デストラクタには多くのスイッチケースが作成されます。
だから私はこのようなソリューションを求めていました:
template <class T>
class IncomingNetworkEvent {
private:
IncomingNetworkEventForGame event;
T* item;
public:
IncomingNetworkEvent();
~IncomingNetworkEvent();
IncomingNetworkEventForGame getEvent();
void setEvent(IncomingNetworkEventForGame event);
T* getItem();
void setItem (T* item);
};
だから私は型キャストすることなく、デストラクタ内の項目を削除することができます。
vector<IncomingNetworkEvent<someType>> m_incomingNetworkArray;
しかしm_incomingNetworkArray
だけIncomingNetworkEvent
一種類のを処理することができますよう、これは私の問題を解決することはできません:私はとしてそれを宣言する必要が
vector<IncomingNetworkEvent> m_incomingNetworkArray;
:しかし、問題は、私のような着信ネットワーク配列を宣言することはできませんです。
どうすれば実現できますか?
'item'ポイントをベースクラスにすることができますし、実際のアイテムはすべてそのベースクラスから派生して作成できますか? –
***どのイベントにどのタイプが含まれているかを知っています***。なぜアイテムはイベント自体に含まれていないのですか? – sameerkn
私はたくさんのイベントがあり、その半分はアイテムを含んでいません。アイテムをイベント(enum)の一部にしておくと、たくさんのクラスを作成する必要があります。私はMartin Bonerソリューションが良いと思います。 – user1438832