【发布时间】:2010-10-31 18:23:02
【问题描述】:
我有这样的事情:
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");
或者,更一般地说,一个外部抽象工厂,它不知道它正在生产的对象的类型,因此可以添加新类型而无需编写更多代码。
【问题讨论】:
-
您能提供有关上下文的详细信息吗?看起来你的编程有点像工厂的东西。
-
如果您的 Manager 的 Produce 方法无论如何都返回一个指向基类的指针,那么使用模板有什么意义呢?你可以像这样定义你的 RegisterProducer 方法: void RegisterProducer(Object * (*pfnProduce)(), const char * pName)
标签: c++ class templates oop static