2012-05-25 155 views
7

在C++中,如果我有一個模板參數,我該如何幹淨地專門化一個默認參數?例如,考慮以下因素:模板參數的默認參數是否可以專用?

template <class Key, class Value = int > class Association; 

如果我想Value,而不是默認floatSpecial類?有沒有一種方法實際上專門化類Association,這樣如果密鑰是Special該值默認爲float

我想做到這一點的一種方式將與性狀:

template <class Key> struct Traits { 
    typedef int defaultValue; 
} 
template<> struct Traits<Special> { 
    typedef float defaultValue; 
} 
template <class Key, class Value = Traits<Key>::defaultValue> class Association; 

是否有這樣做的更簡潔的方式,是不是這樣參與進來,會更容易顯示,int是正常的默認在協會定義的地方?

+1

我認爲應該有一種方式來實現你想要的模板的別名是什麼('using'),但我沒有時間來想辦法 – sehe

回答

8

好了,不,一定是 - 漂亮的一行:

#include <type_traits> 

template <typename Key, 
      typename Value = typename std::conditional<std::is_same<Key, Special>::value, float, int>::type> 
class Association { /* ... */ };