C++ の静的仮想メンバー? 質問する

C++ の静的仮想メンバー? 質問する

staticC++ で、との両方であるメンバー関数を持つことは可能ですかvirtual? どうやら、それを実行する簡単な方法はないようです (static virtual member();コンパイル エラーになります) が、少なくとも同じ効果を達成する方法はあるのでしょうか?

例えば:

struct Object
{
     struct TypeInformation;

     static virtual const TypeInformation &GetTypeInformation() const;
};

struct SomeObject : public Object
{
     static virtual const TypeInformation &GetTypeInformation() const;
};

GetTypeInformation()インスタンス ( object->GetTypeInformation()) とクラス ( SomeObject::GetTypeInformation()) の両方で使用すると、比較に役立ち、テンプレートにとって不可欠なものとなるため、理にかなっています。

私が考えられる唯一の方法は、クラスごとに 2 つの関数 (関数と定数) を記述するか、マクロを使用することです。

他に解決策はありますか?

ベストアンサー1

いいえ、それを行う方法はありません。 を呼び出すと何が起こるでしょうかObject::GetTypeInformation()? 関連付けられたオブジェクトがないため、どの派生クラスのバージョンを呼び出すかはわかりません。

適切に動作させるには、非静的仮想関数にする必要があります。また、オブジェクト インスタンスを使用せずに特定の派生クラスのバージョンを非仮想的に呼び出せるようにしたい場合は、2 番目の冗長な静的非仮想バージョンも提供する必要があります。

おすすめ記事