2012-03-08 71 views
2

我想要一個模板類根據傳遞給構造函數的類的類型自動選擇它的參數。 對象已經有類型。基於重載構造函數的策略類模板參數的選擇

InputA a; 
InputA a2; 
InputB b; 

這些類型應由構造

out<>(a) out; 

被理解是

out<InputA>(a) out; 

out<>(a2) out; 

out<InputA>(a2) out; 

out<>(b) out; 

out<InputB>(b) out; 

它似乎是多餘的,以限定所述模板參數(策略)時這可以從輸入參數的類型來提取。

回答

7

這是與std::pair發生的相同的問題。 此問題的標準解決方法是定義模板工廠(如std::make_pair())。

例如

template<class policy> 
out<policy> make_out(policy p) 
{ 
    return out<policy>(p); 
} 

auto o = make_out(a); 
+0

這很好。但也太確定了,有沒有辦法用類而不是函數做到這一點?像CRTP可能是什麼? – 2012-03-08 19:44:16

+1

我不知道這樣的事情。 – authchir 2012-03-09 04:40:25