Ich habe eine Klasse, um einige Merkmale eines Typs zu beschreiben.Spezialisieren statisch constexpr Datenelement
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(); }
};
Ich möchte my_traits::some_trait
spezialisieren, aber wenn ich versuche:
template<> constexpr int my_traits<int>::some_trait = 1;
Der Compiler beschwert sich, dass my_traits::some_trait
bereits einen Initialisierer hat. Natürlich kann ich es spezialisieren, indem Sie:
template<>
struct my_traits<int>
{
static constexpr int some_trait = 1;
// min and max
};
aber dann habe ich alle anderen Funktionen neu zu definieren, obwohl sie genau das gleiche sein wird.
Also wie kann ich spezialisieren my_traits<int>::some_trait
ohne zu wiederholen min
und max
?
AFAIK das ist nicht möglich. Eine 'constexpr'-Variable muss in ihrer Deklaration initialisiert oder konstruiert werden. –
'statisch constexpr int some_trait = mein_helfer :: value;' –
Sie könnten versuchen, es von einer 'constexpr'-Funktion oder Dienstklasse zu initialisieren, die auf den Typ' int' spezialisiert ist – Niall