Yansıma TS: numaralandırmaların (ve diğer türlerin) statik yansıması
Yansıma TS , özellikle Reflection TS taslağının en son sürümünün [reflektör.ops.enum] / 2 get_enumerators
TransformationTrait
işlemi şu işlemleri sunar :
[reflektör.ops.enum] / 2
template <Enum T> struct get_enumerators
Tüm uzmanlık get_enumerators<T>
karşılamalıdır
TransformationTrait
gereksinimleri (20.10.1). Adlandırılan yuvalanmış tür
, tarafından yansıtılan numaralandırma türünün numaralandırıcılarını tatmin eden ve yansıtan öğeleri içeren type
tatmin edici bir meta nesne türü
ObjectSequence
belirtir .Enumerator
T
Taslağın [reflektör.ops.objseq] ObjectSequence
işlemleri, özellikle [reflekt.ops.objseq] / 1'in, get_size
tatmin edici bir meta-nesne için öğe sayısını çıkarmak için özelliği kapsadığı işlemleri kapsar ObjectSequence
:
[reflektör.ops.objseq] / 1
template <ObjectSequence T> struct get_size;
Her uzmanlık get_size<T>
karşılayacaktır
UnaryTypeTrait
bir taban özelliğine sahip şartları (20.10.1)
integral_constant<size_t, N>
, N
nesne sırayla eleman sayısıdır.
Böylelikle, Reflection TS mevcut haliyle kabul edilecek ve uygulanacaktı, bir numaralandırmanın eleman sayısı derleme zamanında aşağıdaki gibi hesaplanabilir:
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators<Example>::type;
static_assert(get_size<ExampleEnumerators>::value == 5U, "");
takma ad şablonlarını görmemiz get_enumerators_v
ve get_type_v
yansımayı daha da basitleştirmemiz muhtemeldir :
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators_t<Example>;
static_assert(get_size_v<ExampleEnumerators> == 5U, "");
Reflection TS'de Durum
Herb Sutter'ın Gezi raporunda belirtildiği gibi : 9 Haziran 2018 ISO C ++ komitesi yaz toplantısından Yaz ISO C ++ standartları toplantısı (Rapperswil) , Reflection TS özellik-tamamlandı olarak ilan edildi
Reflection TS özelliği tamamlandı : Reflection TS özelliği tamamlandı olarak ilan edildi ve yaz boyunca ana yorum oylamasına gönderiliyor. Bir kez daha TS'nin metaprogramlamaya dayalı mevcut şablon sözdiziminin yalnızca bir yer tutucu olduğunu unutmayın; talep edilen geri bildirim tasarımın özünde yer alır ve komite yüzey sözdizimini sıradan derleme zamanı kodu ve <>
stil olmayan metaprogramlama kullanan daha basit bir programlama modeliyle değiştirmeyi planladığını zaten biliyor .
ve başlangıçta C ++ 20 için planlanmıştı , ancak Reflection TS'nin yine de C ++ 20 sürümüne dahil etme şansı olup olmayacağı belirsiz.