我有这样的事情:强制儿童类的静态方法重载在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设计,我应该做一些完全不同的事情?
编辑:
什么我基本上是试图做的,就是让这样的工作:
Manager manager;
manager.RegisterProducer(&Woot::Produce, "Woot");
manager.RegisterProducer(&Goop::Produce, "Goop");
Object obj = manager.Produce("Woot");
,或者更一般地说,外部抽象工厂不知道它正在生成的对象的类型,以便可以添加新的类型而无需编写更多的代码。
你能提供关于上下文的细节吗?看起来像你的编程某种工厂thingy。 – diapir 2009-06-05 20:13:37
如果您的Manager's Produce方法无论如何都返回一个指向基类的指针,那么使用模板有什么意义?你可以像这样定义你的RegisterProducer方法:void RegisterProducer(Object *(* pfnProduce)(),const char * pName) – 2009-06-05 20:46:25