Reflection TS: phản xạ tĩnh của enum (và các loại khác)
Reflection TS , đặc biệt là [Reflection.ops.enum] / 2 của phiên bản mới nhất của bản thảo Reflection TS cung cấp get_enumerators TransformationTraitthao tác:
[phản ánh.ops.enum] / 2
template <Enum T> struct get_enumerators
Tất cả các chuyên môn của get_enumerators<T>phải đáp ứng các
 TransformationTraityêu cầu (20.10.1). Kiểu lồng nhau có tên
 typechỉ định kiểu siêu đối tượng thỏa mãn ObjectSequence, chứa các phần tử đáp ứng Enumeratorvà phản ánh các đối tượng của kiểu
 liệt kê được phản ánh bởi T.
[phản ánh.ops.objseq] của bản nháp bao gồm các ObjectSequencehoạt động, trong đó đặc biệt là [phản ánh.ops.objseq] / 1 bao gồm get_sizeđặc điểm trích xuất số lượng phần tử cho một siêu đối tượng đáp ứng ObjectSequence:
[phản ánh.ops.objseq] / 1
template <ObjectSequence T> struct get_size;
Tất cả các chuyên ngành của get_size<T>phải đáp ứng các
 UnaryTypeTraityêu cầu (20.10.1) với một đặc tính cơ bản của
 integral_constant<size_t, N>, nơi Nlà số phần tử trong dãy đối tượng.
Do đó, trong Reflection TS đã được chấp nhận và thực hiện ở dạng hiện tại của nó, số phần tử của một enum có thể được tính toán, tại thời điểm biên dịch, như sau:
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators<Example>::type;
static_assert(get_size<ExampleEnumerators>::value == 5U, "");
nơi chúng ta có thể thấy các mẫu bí danh get_enumerators_vvà get_type_vđể đơn giản hóa phản ánh hơn nữa:
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators_t<Example>;
static_assert(get_size_v<ExampleEnumerators> == 5U, "");
Trạng thái phản ánh TS
Như đã nêu trong báo cáo Chuyến đi của Herb Sutter : Cuộc họp tiêu chuẩn ISO C ++ mùa hè (Rapperswil) từ cuộc họp mùa hè của ủy ban ISO C ++ ngày 9 tháng 6 năm 2018, Reflection TS đã được tuyên bố là hoàn chỉnh về tính năng
Reflection TS đã hoàn chỉnh về tính năng : Reflection TS đã được tuyên bố là đã hoàn thành về tính năng và đang được gửi đi để bỏ phiếu bình luận chính trong mùa hè. Lưu ý một lần nữa rằng cú pháp dựa trên lập trình siêu chương trình mẫu hiện tại của TS chỉ là một trình giữ chỗ; phản hồi được yêu cầu nằm ở “ruột” cốt lõi của thiết kế và ủy ban đã biết họ có ý định thay thế cú pháp bề mặt bằng một mô hình lập trình đơn giản hơn sử dụng mã thời gian biên dịch thông thường và <>lập trình siêu mẫu không theo kiểu.
và ban đầu được lên kế hoạch cho C ++ 20 , nhưng không rõ liệu Reflection TS có còn cơ hội đưa nó vào bản phát hành C ++ 20 hay không.