2

フレームワーク用のクラスの大きな階層を開発していますが、それが完了するとかなり多くの型キャストが必要になります。

私の質問は、列挙型を使用して階層内のすべてのオブジェクト型を格納する静的メンバーを配置するのがどれほど愚かなアイデアかということです。すべてのクラスのメンバーを static にしても、インスタンス化されたオブジェクトのサイズは増加せず、実行時にオブジェクトの型を決定する (潜在的に) 高速な方法が dynamic_cast よりも得られます。

少なくともそれが基本的な考え方です。このアプローチはどの程度適切であり、潜在的な欠陥はありますか?

4

2 に答える 2

3

オブジェクト間で共有される静的変数から各オブジェクトのタイプをどのように決定するのかわかりません。クラスごとにオーバーライドする仮想関数があるが、静的変数がまったく必要ない場合を除き、次のようにします。

struct Base
{
   virtual int type() = 0;
};

struct Derived1 : public Base
{
   virtual int type() { return 1; }
};

struct Derived2 : public Base
{
   virtual int type() { return 2; }
};

dynamic_cast最速の解ではありませんが、またはより数倍高速ですtypeid

于 2012-04-18T19:35:49.263 に答える