2017-10-16 125 views
1

有沒有辦法創建一個類模板,它可以將自己作爲模板參數進行實例化?創建一個類模板,可以把自己創建的類作爲參數

我想可以說在我的代碼的東西這樣的:

Operation<float> op1(0.3f); 
Operation<float, Operation> op2(0.5f, op1); 

我試圖定義一個與可變參數模板參數,類模板,以避免在一個無限循環結束了(模板將有定義一個模板模板參數,該模板參數本身也需要一個模板參數,該模板參數也必須採用模板參數,等等......)。

template<typename T, typename... OP> 
class Operation{ 
    Operation(T pVal, OP... pOP); 
    ... 
}; 

typename... OP應該能夠採取Operation<T>甚至是Operation<T, Operation<T>>

這可能嗎?

上下文:我試圖構建基於策略的函數,它們可以組合形成算術「連鎖反應」。一個操作使用一個Function策略類來確定它應該做什麼,它也將採用兩個Source對象作爲參數。源對象可能是Function策略或其他Operation,因爲它們都定義了函數T execute()。最後的目標是通過調用這些函子在運行時執行這些算術運算。

+1

'Operation'不是一個類,所以它不能用於模板類型參數。 'Operation'是一個模板類,所以它可以用來代替模板模板類型參數。 '操作'是一個類,可以用來代替模板類型參數。 – bolov

+1

您是否想要構建壓制模板?如果您可能想查看['boost :: proto'](http://www.boost.org/doc/libs/1_65_1/doc/html/proto.html)能爲您做些什麼。 – NathanOliver

+0

@NathanOliver看起來像這實際上是我想要做的,只是更普遍和充實。感謝您的資源! – stimulate

回答

3

您可以使用:

template<typename T, typename... OP> 
class Operation{ 
    // ... 
}; 

但用法是

Operation<float> op1(0.3f); 
Operation<float, Operation<float>> op2(0.5f, op1); 
+0

謝謝。現在很明顯。我試圖通過模板作爲參數,而我應該通過實例化的類。 – stimulate

1

http://en.cppreference.com/w/cpp/language/template_parameters

模板的模板參數模板參數必須是一個id表達其名的類模板或模板別名。

當參數是類模板時,匹配參數時僅考慮主模板。部分專業化(如果有的話)僅在基於此模板模板參數的專業化碰巧實例化時才被考慮。

我希望這可以幫助你解決問題。尋找「模板模板參數」。

相關問題