Может ли аргумент по умолчанию параметра шаблона быть специализированным?

В C++, если у меня есть параметр шаблона, как я могу четко специализировать аргумент по умолчанию? Например, рассмотрим следующее:

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

Что, если я nt Valueвместо значения по умолчанию floatдля класса Special? Есть ли способ фактически специализировать класс Associationтаким образом, чтобы, если Key был 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 является нормальным значением по умолчанию в месте, где определена ассоциация ?

7
задан WilliamKF 25 May 2012 в 14:09
поделиться