我有一個非常簡單的C++查找表調度命令:子類查找表
template <class T> Action* CreateAction(Command *c)
{
return new T(c);
}
typedef Action* CreateActionFunc(Command *c);
typedef struct ActionTable {
string name;
CreateActionFunc *func;
} ActionTableEntry;
vector<ActionTableEntry> GlobalActionTable = {
{ "quit" , &CreateAction<DoQuit> },
};
這工作得很好,但我寧願讓我的CreateAction功能構建堆棧中的新對象,並通過值返回。但是當我寫這個:
template <class T> T CreateAction(Command *c)
{
return T(c);
}
typedef Action CreateActionFunc(Command *c);
然後程序將不再編譯。首先,我得到一個錯誤,即一個抽象類無法實例化(在typedef行上),並且還有一個錯誤,即該表的初始化列表與該向量的類型不匹配。
有一個非常類似的問題here但每個答案在工廠方法中使用new
,這是明確我想要避免的。如何才能做到這一點?
感謝Kiroxas,我想這回答了這個問題! – Segfault