Mam klasę opisującą niektóre cechy danego typu.Specjalizuję się w statycznym członku danych 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(); }
};
chcę specjalizują my_traits::some_trait
ale gdy próbuję:
template<> constexpr int my_traits<int>::some_trait = 1;
Kompilator narzeka, że my_traits::some_trait
ma już inicjator. Oczywiście mogę specjalizują się go robi:
template<>
struct my_traits<int>
{
static constexpr int some_trait = 1;
// min and max
};
ale potem trzeba przedefiniować wszystkie inne funkcje, choć będą dokładnie takie same.
Więc jak mogę wyspecjalizować my_traits<int>::some_trait
bez powtarzania min
i max
?
AFAIK to nie jest możliwe. Zmienna "constexpr' musi zostać zainicjowana lub zbudowana w deklaracji. –
'static constexpr int some_trait = my_helper :: value;' –
Można go zainicjować za pomocą funkcji 'constexpr' lub klasy narzędziowej, która specjalizuje się w typie' int' – Niall