我有這樣的事情:強制兒童類的靜態方法重載在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