私はある型の特性を記述するクラスを持っています。Specialize静的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(); }
};
私はmy_traits::some_trait
を専門にしたいが、私はしようとすると:
template<> constexpr int my_traits<int>::some_trait = 1;
コンパイラはmy_traits::some_trait
はすでに初期化子を持っていることを文句を言います。
template<>
struct my_traits<int>
{
static constexpr int some_trait = 1;
// min and max
};
をその後私は、彼らはまったく同じになるにもかかわらず、他のすべての機能を再定義する必要があります。もちろん、私はやってそれを特化することができます。
my_traits<int>::some_trait
をmin
とmax
を繰り返さずに、どのように特化できますか?
AFAIKこれはできません。 'constexpr'変数は、その宣言で初期化または構築されなければなりません。 –
'static constexpr int some_trait = my_helper :: value;' –
'int'型に特化した' constexpr'関数またはユーティリティクラスから初期化することができます – Niall