クラス型を自動的に登録するための設計パターンまたはイディオムが存在するかどうか疑問に思っていました。または、単純に、基本クラスを拡張するだけで、クラスでメソッドを強制的に呼び出すことはできますか?
たとえば、基本クラスAnimal
と拡張クラスTiger
およびがありDog
、 を拡張するすべてのクラスを出力するヘルパー関数があるとしますAnimal
。
だから私は次のようなものを持つことができます:
struct AnimalManager
{
static std::vector<std::string> names;
static void registerAnimal(std::string name) {
//if not already registered
names.push_back(name); }
};
struct Animal
{
virtual std::string name() = 0;
void registerAnimal() { AnimalManager::registerAnimal(name()); }
};
struct Tiger : Animal
{
virtual std::string name() { return "Tiger"; }
};
したがって、基本的には次のようにします。
Tiger t;
t.registerAnimal();
static
これも関数に組み込むことができます。registerAnimal
メソッドを明示的に呼び出すことなくこれを達成するのに役立つパターン(不思議なことに再帰的なテンプレートなど)またはそのようなものはありますか?
私は将来拡張可能になり、他class Animal
の人が を呼び出すのを忘れる可能性があることを望んregister
でいます。
PS これは単なる例であり、実際に動物を実装しているわけではありません。