簡単に言えば、タイトルが示すように、親から子の静的メソッドを呼び出す必要があります。問題は、複数の子が存在する可能性があるため、親の子クラス名がわからないことです。静的メソッドは静的である必要があります。例えば:
class A{ // parent class
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
}
void main(){
B b;
b.process();
}
頭に浮かぶ解決策の 1 つは、静的メソッドを呼び出す仮想メソッドを用意することです。これはあまり良いことではなく、私が持っているすべての子に対してメソッドを実装する必要があることを意味します:
class A{ // parent class
virtual int getDataFromStaticMethod() = 0;
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
virtual int getDataFromStaticMethod(){
return B::getData();
}
}
void main(){
B b;
b.process();
}
しかし、静的メソッドを使用して純粋仮想メソッドを実装できることを本当に望んでいます。
class A{ // parent class
virtual int getData() = 0;
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
}
void main(){
B b;
b.process();
}
助言がありますか?
ありがとう!