其實,所有的答案都很好,而且內容翔實,但它們不能解決我的特殊問題。我不認爲這是回答非常有幫助的人的錯,而是我嚴厲地解釋了我的問題。因此,我決定在這裏發佈一個全新的問題,其中包含更多相關的代碼示例:Mixing Command pattern, Factory pattern and templates all together ...。如果有人關心一下......在函數調用中使用模板模板參數
現在,原題:
我不認爲這是可以做到我想要什麼,但我要問,以防萬一....
我有一個familly我希望通過工廠創建模板類。 我使用工廠的原因是工廠有一些數據成員,用於初始化通過該工廠創建的每個類。
例如,讓我們考慮這個類:
class DoSomething : public UndoableCommand< int, float >
我試圖創建一個命令工廠,所以它可以創建類像上面的,並照顧他們的初始化,壽命等等
在我的(非模板)的CommandFactory,我定義了以下方法:
template < template <typename P1, typename P2, typename P3, typename P4> class CommandType>
void createCommand(P1 p1, P2 p2, P3 p3, P4 p4)
{
UndoableCommand* cmdPtr;
cmdPtr=new CommandType(P1 p1, P2 p2, P3 p3, P4 p4);
//...
}
然而,這並不編譯。行 「void運算符()(P1 P1,P2 P2,P3 P3,P4 P4)」 產生以下錯誤:
錯誤C2065:P1':未聲明的標識符
因爲類等「DoSomething的」只有一個聲明(DoSomething的總是會使用<整數,浮點>),我以爲我可以使用模板參數推導,並用語法落得像:
myCommandFactory.createCommand<DoSomething>(1 /*int*/, 1.0f /*float*/);
是否有可能在所有?如果是這樣,什麼是適當的語法?
我想我隨時可以定義我的工廠方法,如:
template <class CommandType, typename P1, typename P2, typename P3, typename P4>
void createCommand(P1 p1, P2 p2, P3 p3, P4 p4)
{
UndoableCommand* cmdPtr;
cmdPtr=new CommandType(P1 p1, P2 p2, P3 p3, P4 p4);
//...
}
,然後調用
myCommandFactory.createCommand<DoSomething, int, float>(1 /*int*/, 1.0f /*float*/);
但這是多餘的,不是很優雅......
有沒有這樣的事,作爲一個'模板class',只有'類模板'。 – pmr 2012-08-14 16:12:52