我想知道是否存在自动注册类类型的设计模式或习语。或者更简单,我可以通过简单地扩展基类来强制调用一个类的方法吗?
例如,假设我有一个基类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这只是一个例子,我实际上并没有实现动物。