Ho una classe per descrivere alcuni tratti di un tipo.Specialized data member statico constexpr
template<typename T>
struct my_traits
{
static constexpr int some_trait = 0;
static constexpr T min() { return std::numeric_limtis<T>::min(); }
static constexpr T max() { return std::numeric_limits<T>::max(); }
};
voglio specializzarmi my_traits::some_trait
ma quando provo:
template<> constexpr int my_traits<int>::some_trait = 1;
Il compilatore si lamenta che my_traits::some_trait
ha già un inizializzatore. Certo che posso specializzarla facendo:
template<>
struct my_traits<int>
{
static constexpr int some_trait = 1;
// min and max
};
ma poi ho dovuto ridefinire tutte le altre funzioni, anche se saranno esattamente lo stesso.
Quindi, come posso specializzare my_traits<int>::some_trait
senza dover ripetere min
e max
?
AFAIK questo non è possibile. Una variabile 'constexpr' deve essere inizializzata o costruita nella sua dichiarazione. –
'static constexpr int some_trait = my_helper :: value;' –
Si potrebbe cercare di inizializzarlo da una funzione 'constexpr', o classe di utilità, che è specializzata per il tipo' int' – Niall