2011-12-21 115 views
4

如果我有一個模板類,像這樣:模板類專業化多種類型滿足以下條件

template<typename T> 
class Type { /* ... */ }; 

不以任何方式修改Type,有一個簡單的方法來專門它所有這樣的類型那符合編譯時的條件?例如,如果我想專門Type所有整數類型,我想這樣做(只有一些作品,這是):

template<typename T> 
class Type<std::enable_if<std::is_integral<T>, T>::type> { /* ... */ }; 

回答

6

這應該工作:

template<typename T, bool B = std::is_integral<T>::value> 
class Type; 

// doesn't have to be a specialization, although I think it's more clear this way 
template<typename T> 
class Type<T, false> { /* ... */ }; 

template<typename T> 
class Type<T, true> { /* ... */ }; 
+0

「*不以任何方式修改'Type' *」 - 這不符合條件。 – ildjarn 2011-12-21 20:01:35

+0

足夠接近(我可以看到多種原因,爲什麼我尋求的想法對於編譯器編寫者或標準作者來說是不可行的。) – asc 2011-12-22 08:22:27

+0

也許類型已被修改,但從其餘代碼的角度來看,它看起來很漂亮幾乎相同。 – 2011-12-23 12:03:36