私は階層内に異なるタイプのハンドルを持っています。多形ハンドル
class Handle { common data }
class HandleA : Handle { data specific to a }
class HandleB : Handle { data specific to b }
ほとんどの部分はハンドルのみを扱います。しかし、HandleA/HandleBの「管理者」の一部では、子クラスのデータにアクセスする必要があります。 例:
void ManagerA::DoSomething(Handle handle)
{
// needs access to data in handleA
}
は、鋳造関係のないこのへの解決策はありますか?
私のアイデア、これまで:
- ManagerA/Bにマップ内の追加データを保存したデータ(追加のハッシュテーブルのルックアップ)
がいることをルックアップするためにハンドルを使用 - ハンドル(handle.DoSomething(中の多型のメソッドを持っています))適切なマネージャメソッドを呼び出す(すべてのハンドルに追加のポインタが必要)
- それをねじ込み、キャストを使用
アイデア?何か不足していますか?それは一つだけに固有のデータなら
おかげ
なぜ、サブクラスHandleXオブジェクトを取得するためにdynamic_castを呼び出さないようにしたいですか? – chollida
おそらく鋳造は多くのC++教科書に「悪いカルマ」を持っていると思われます:ホイッスル: –
それが不透明でないなら、本当にハンドルですか?ハンドルが何であるか分かっていて、それを適切なタイプとして使用する必要がある場合は、なぜキャストを使用しないのですか?キャストに何が問題なの? – Pod