2016-01-06 189 views
3

有沒有什麼辦法通過改變傳遞的值來讓不同的代碼擁有相同的模板類型?即:相同的模板,不同的代碼?

template <bool> 
class container; 

,並具有container<true>產生不同的代碼比container<false>

如果不是有沒有其他辦法呢?

+1

是的,這就是模板的目的。但是請注意,「容器」和「容器」不是同一類型。 – 5gon12eder

+1

我不太瞭解downvote。這個問題怎麼沒用? (研究的努力可能很低,但仍然比其他許多人出現在這裏更有用)。 –

回答

8

是的。這叫做模板專業。你可以這樣寫代碼:

template <bool> class container { 
    /* Implementation for true */ 
}; 

template <> class container<false> { 
    /* Implementation for false */ 
}; 

現在,如果你實例container<true>,它會挑頂配版本,因爲底部有一個是不適用的。如果您實例化container<false>,那麼將選擇底部的一個,因爲兩個版本都適用,但底部更專門化。

這裏的實現可能完全不同。沒有要求他們有任何共同點。這通常用於實現編譯時計算。查看模板元編程瞭解更多信息。

+0

「查找模板元編程的更多信息」太多了,這裏 –

+0

@DieterLücking同意。我主要是在「實現編譯時計算」的背景下提及它,因爲我認爲如果OP很好奇地瞭解如何使用模板特化可能是一個很好的起點。 – templatetypedef

相關問題