仮想メソッドを持つ抽象基本クラスがあります。派生クラスでは、このメソッドが実装されています。ただし、そのクラスのオブジェクトをインスタンス化せずに関数を呼び出せるようにするために、派生クラスの関数を静的メソッドとして使用したいと考えています。
class Base
{
virtual double Foo(double rParam) const;
};
class Derived1 : public Base
{
static double Foo(double rParam);
};
class Derived2 : public Base
{
static double Foo(double rParam);
};
基本的に、Derived1 と Derived2 は静的関数 (オブジェクト データに依存しない) の異なる実装を提供しますが、基本クラスの他の関数でそれらの関数を呼び出せるようにするために、これらの関数を仮想化する必要があります。私が現在見ている唯一の解決策は、派生クラスに 2 つのメンバー関数を実装することです。1 つは基本クラスの仮想関数で、もう 1 つは (別の名前で) 静的関数です。ソース コードの二重化を防ぐために、仮想関数は静的関数を直接呼び出すことができます (インライン化することができます)。他の解決策はありますか?
class Derived : public Base
{
double Foo(double rParam)const
{
return FooStatic(rParam);
}
inline static double FooStatic(double rParam);
};