Chuẩn C++ 11 chỉ định đặc điểm kiểu std::alignment_of<T>
, chỉ trả về giá trị alignof(T)
.Đặc điểm kiểu tiêu chuẩn cho giá trị sizeof (T)
Có một đặc điểm tương tự cho nhà điều hành sizeof
không? Tôi chỉ thiếu nó, hoặc là nó chỉ bị mất trong tiêu chuẩn, hoặc là có một số lý do kỹ thuật tối nghĩa lý do tại sao nó không được chỉ định?
Rõ ràng nó là tầm thường để tạo ra một đặc điểm như vậy, nhưng tôi không thể tưởng tượng nó sẽ không được xem xét khi giới thiệu std::alignment_of
.
Đối với ngữ cảnh, tôi có đặc điểm kiểu tùy chỉnh mà tôi sử dụng để nhận giá trị tối đa của một đặc điểm đơn lẻ khi được áp dụng cho danh sách các loại.
template <template<class> class Trait, typename F, typename... T>
struct trait_max
: std::integral_constant<decltype(Trait<F>::value),
(Trait<F>::value > trait_max<Trait, T...>::value) ? Trait<F>::value : trait_max<Trait, T...>::value>
{ };
template <template<class> class Trait, typename F>
struct trait_max<Trait, F>
: std::integral_constant<decltype(Trait<F>::value), Trait<F>::value>
{ };
Đặc điểm này là thực sự hữu ích cho khi bạn cần biết tối đa của một tập hợp các loại như sau:
auto max_align = traits_max<std::alignment_of, int, float, std::string>::value;
auto max_size = traits_max<std::size_of, int, float, std::string>::value; // doesn't exist
Lỗi trong mã của bạn, 'Trait 'phải là' Trait ' sau toán tử '?'. Tôi chỉ nhận thấy bởi vì điều này là tuyệt vời, và tôi đang sử dụng nó. –
Lý do duy nhất 'std :: alignment_of' là tiêu chuẩn vì nó là một phần của TR1. –
Simple
May mắn thay, 'mẫu struct size_of: std :: integral_constant {};' cũng không khó để viết. –
Yakk