Không có cách nào để tổng hợp mẫu is_aggregate
. Các quy tắc cho dù một cái gì đó tham gia vào khởi tạo tổng hợp không thể được phát hiện bởi C++ 14 kỹ thuật lập trình meta (họ sẽ yêu cầu hỗ trợ phản chiếu).
Lý do chung cho việc không có điều này là thiếu nhu cầu rõ ràng. Ngay cả trong trường hợp của your wrapper, có ít gây hại khi áp dụng nó cho các loại không tổng hợp, vì cú pháp khởi tạo đồng nhất có thể được áp dụng cho không tổng hợp. Bạn sẽ thực hiện tất cả các chuyển đổi không phải là explicit
, nhưng đó là một thứ có thể được khắc phục thông qua lập trình meta metaprogramming/enable_if
thể dục.
Nơi hữu ích nhất cho một thứ như vậy sẽ là allocator::construct
, cho phép bạn sử dụng tổng hợp khởi tạo để xây dựng đối tượng nếu số T
là tổng hợp, trong khi sử dụng các hàm gọi trực tiếp khác (để tránh phần "không đồng nhất") khởi tạo thống nhất).
Nguồn
2016-01-25 14:35:22
Tôi không thể nghĩ ra bất kỳ ứng dụng thực tế nào của 'is_aggregate'. Ví dụ. nó không giúp với serialization. –
Nếu bạn đang tìm kiếm loại đặc điểm cho bạn biết khi nào, ví dụ: 'memcpy' là an toàn, sau đó bạn muốn [' std :: is_trivially_copyable'] (http://en.cppreference.com/w/cpp/types/is_trivially_copyable). – ildjarn
@ Cheersandhth.-Alf Tôi muốn viết một mẫu hàm 'wrap()' cho [this] (http://codereview.stackexchange.com/q/117744/70823), chỉ được bật nếu 'T' là một loại tổng hợp. – Lingxi