次のようなユースケースがあります
Class foo {
public:
static std::string make(std::string a) { .. }
}
fooを抽象基本クラスにしたいのですが、仮想関数を静的にすることはできないため、makeをこの抽象ベースに含めることはできません。
このような
Class foo {
public:
static virtual std::string make (std::string) = 0; //error this cannot be done
}
Class fooImpl: foo{
public:
std::string make(std::string a) { ..}
}
抽象クラスでメソッドを非静的にするか、派生クラスに静的メソッドを持たせることは、設計の観点から優れたアプローチです。