昨天研究了C++ 的 type traits,我們在使用C++的模板的時候,有時我們需要確定模板中的T究竟是什么類型的,這時候我們就要用到type traits.
比如我們定義一個比較大小的函數(shù):
template < typename T > less(const T & a, const T & b);
我們需要在T是int,double,string時設(shè)計不同的算法,一種可以選擇的方案就是函數(shù)重載。不過我們也可以用type traits的方法來確定T是什么類型的。這個需要用到template的偏特化。
比如我們設(shè)計一個判斷一個類是不是 int 型的類,如下
template < typename T > class is_int { static const bool value = false};
表示默認(rèn)所有的類都不是int型的,然后我們對int型偏特化,如下
template <> class is_int {static const bool value = true;};
這樣,對于任意給定的類T,我們都可以用 is_int<T>::value 來判斷他是不是整型的。
這種方法相對于函數(shù)重載的好處是,他是編譯時就可以判斷好的,而重載是在運(yùn)行時才判斷的,這種方法可以節(jié)約一點(diǎn)微不足道的時間,嘿嘿!