In C++, se ho un parametro template, come posso specializzare in modo pulito un argomento predefinito? Ad esempio, si consideri il seguente:L'argomento predefinito di un parametro modello può essere specializzato?
template <class Key, class Value = int > class Association;
Cosa succede se voglio Value
per impostazione predefinita invece float
per la classe Special
? C'è un modo per specializzare in effetti la classe Association
in modo tale che se la chiave è Special
il valore predefinito è invece float
?
immagino un modo per farlo sarebbe con tratti:
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;
C'è un modo più succinta di fare questo che non è così coinvolto e potrebbe mostrare più facilmente che int è il default normale al luogo in cui è definita l'associazione?
credo che ci dovrebbe essere un modo per ottenere ciò che si desidera con gli alias di template ('using'), ma io non ho il tempo di capirlo – sehe