У меня есть что-то вроде этого:Принудительно статический метод перегрузки в дочернем классе в C++
class Base
{
public:
static int Lolz()
{
return 0;
}
};
class Child : public Base
{
public:
int nothing;
};
template <typename T>
int Produce()
{
return T::Lolz();
}
и
Produce<Base>();
Produce<Child>();
возвращают 0, что, конечно, правильно, но нежелательно. Есть ли в любом случае принудительное применение явного объявления метода Lolz() во втором классе или, может быть, ошибка времени компиляции при использовании Produce<Child>()
?
Или это плохой дизайн OO, и я должен сделать что-то совершенно другое?
EDIT:
То, что я в основном пытаются сделать, это сделать что-то вроде этой работы:
Manager manager;
manager.RegisterProducer(&Woot::Produce, "Woot");
manager.RegisterProducer(&Goop::Produce, "Goop");
Object obj = manager.Produce("Woot");
или, в более общем плане, внешний абстрактный завод, который не знает типы создаваемых объектов, так что новые типы могут быть добавлены без написания большего количества кода.
Можете ли вы предоставить подробную информацию о контексте? Похоже, ваше программирование - своего рода заводская штуковина. – diapir
Если метод Produce вашего Менеджера все равно возвращает указатель на базовый класс, то в чем смысл использования шаблонов? Вы можете просто определить свой метод RegisterProducer следующим образом: void RegisterProducer (Object * (* pfnProduce)(), const char * pName) –