static
C++ で、との両方であるメンバー関数を持つことは可能ですか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 番目の冗長な静的非仮想バージョンも提供する必要があります。