Tôi có một lớp học để mô tả một số đặc điểm của một loại.Chuyên constexpr tĩnh thành viên dữ liệu
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(); }
};
Tôi muốn chuyên my_traits::some_trait
nhưng khi tôi cố gắng:
template<> constexpr int my_traits<int>::some_trait = 1;
Trình biên dịch phàn nàn rằng my_traits::some_trait
đã có một khởi tạo. Tất nhiên tôi có thể chuyên nó bằng cách thực hiện:
template<>
struct my_traits<int>
{
static constexpr int some_trait = 1;
// min and max
};
nhưng sau đó tôi phải xác định lại tất cả các chức năng khác, mặc dù chúng sẽ giống hệt nhau.
Vậy làm thế nào tôi có thể chuyên my_traits<int>::some_trait
mà không phải lặp lại min
và max
?
AFAIK điều này là không thể. Biến 'constexpr' phải được khởi tạo hoặc được xây dựng trong khai báo của nó. –
'tĩnh constexpr int some_trait = my_helper :: trị; ' –
Bạn có thể tìm kiếm để khởi tạo nó từ một' chức năng constexpr', hoặc lớp tiện ích, đó là chuyên ngành cho các loại 'int' – Niall