Extensions for reflection
C++ νμ₯ 리νλ μ , ISO/IEC TS 23619:2021μ ν΅μ¬ μΈμ΄μ λν μμ μ¬νμ λͺ μνκ³ μ΄ νμ΄μ§μ λμ΄λ C++ νμ€ λΌμ΄λΈλ¬λ¦¬μ μλ‘μ΄ κ΅¬μ± μμλ€μ μ μν©λλ€.
Reflection TSλ C++20 νμ€μ κΈ°λ°μΌλ‘ ν©λλ€(λ¨, κ°λ μ μ μλ Concepts TS μ€νμΌλ‘ λͺ μλμ΄ μμ΅λλ€).
ν΅μ¬ μΈμ΄ λ³κ²½μ¬ν
reflexpr-μ§μ μ
reflexpr-specifier
λ
reflexpr
(
reflexpr-operand
)
ννλ₯Ό κ°μ§λ©°, λ©ν κ°μ²΄ νμ
μ μ§μ ν©λλ€(μλ μ°Έμ‘°).
reflexpr-operand μ λ€μ μ€ νλμΌ μ μμ΅λλ€:
::
|
(1) | ||||||||
| type-id | (2) | ||||||||
| nested-name-specifier (optional) namespace-name | (3) | ||||||||
| id-expression | (4) | ||||||||
(
expression
)
|
(5) | ||||||||
| function-call-expression | (6) | ||||||||
| functional-type-conv-expression | (7) | ||||||||
μ¬κΈ°μ function-call-expression λ
postfix-expression
(
expression-list
(μ νμ )
)
|
|||||||||
κ·Έλ¦¬κ³ functional-type-conv-expression λ λ€μκ³Ό κ°μ μ’ λ₯μ ννμμΌλ‘ λͺ μμ μΊμ€νΈ λ₯Ό μνν©λλ€:
λ¨μ-νμ
-μ§μ μ
(
ννμ-λͺ©λ‘
(μ νμ )
)
|
(1) | ||||||||
νμ
μ΄λ¦-μ§μ μ
(
ννμ-λͺ©λ‘
(μ νμ )
)
|
(2) | ||||||||
| λ¨μ-νμ -μ§μ μ μ€κ΄νΈ-μ΄κΈ°ν-λͺ©λ‘ | (3) | ||||||||
| νμ μ΄λ¦-μ§μ μ μ€κ΄νΈ-μ΄κΈ°ν-λͺ©λ‘ | (4) | ||||||||
reflexpr-specifier μ νΌμ°μ°μλ type , namespace , enumerator , variable, data member , function parameter , captured entity , function-call-expression λλ functional-type-conv-expression , κ·Έλ¦¬κ³ κ΄νΈλ‘ λ¬ΆμΈ ννμμ΄μ΄μΌ ν©λλ€. reflexpr ( :: ) λ μ μ λ€μμ€νμ΄μ€λ₯Ό λ°μν©λλ€.
reflexpr-operand
κ°
(
expression
)
ννμΌ κ²½μ°,
expression
μ (μ¬λ¬ κ΄νΈλ‘ λλ¬μΈμΌ μ μλ)
function-call-expression
λλ
functional-type-conv-expression
μ΄μ΄μΌ ν©λλ€.
κ΄νΈλ‘ λ¬Άμ΄μ§ μμ νΌμ°μ°μκ°
type-id
λλ
functional-type-conv-expression
λ‘ ν΄μλ μ μλ κ²½μ°, μ΄λ
type-id
λ‘ μ²λ¦¬λ©λλ€. ν¨μ μ€νμΌ μΊμ€νΈμ
type-id
μ¬μ΄μ λͺ¨νΈμ±μ ν΄μνκΈ° μν΄ κ΄νΈλ₯Ό μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κΈ°λ³Έ μμ±μλ₯Ό κ°μ§ ν΄λμ€ νμ
X
κ° μ£Όμ΄μ‘μ λ,
reflexpr
(
X
(
)
)
λ ν¨μ νμ
X
(
)
λ₯Ό λ°μνκ³ ,
reflexpr
(
(
X
(
)
)
)
λ ννμ
X
(
)
λ₯Ό λ°μν©λλ€.
νΌμ°μ°μκ° λ³μΉκ³Ό ν΄λμ€ μ΄λ¦μ λͺ¨λ μ§μ νλ κ²½μ°, reflexpr μ§μ μκ° λνλ΄λ νμ
μ λ³μΉμ λ°μνλ©°
reflect::Alias
λ₯Ό μΆ©μ‘±ν©λλ€.
νΌμ°μ°μκ° λΈλ‘ λ²μ λ΄μ μ μΈλ μ΄λ¦μ μ§μ νκ³ , ν΄λΉ λͺ λͺ λ κ°μ²΄κ° μΊ‘μ²λμ§λ μμκ³ ν¨μ λ§€κ°λ³μλ μλ κ²½μ°, νλ‘κ·Έλ¨μ νμμ λ§μ§ μμ΅λλ€.
λ©ν κ°μ²΄ νμ
λ©ν κ°μ²΄ νμ
μ μ΄λ¦ μλ λΆμμ ν λ€μμ€νμ΄μ€ λ²μ ν΄λμ€ νμ
μ
λλ€.
reflect::Object
κ°λ
μ ν΄λΉ νμ
μ΄ λ©ν κ°μ²΄ νμ
μΈ κ²½μ°μλ§ λ§μ‘±λ©λλ€.
λ©ν κ°μ²΄ νμ
μ
reflexpr
μ νΌμ°μ°μμ λ°λΌ λ€λ₯Έ κ°λ
λ€λ λ§μ‘±ν μ μμ΅λλ€.
λμΌν νΌμ°μ°μμ λ°λ³΅μ μΌλ‘
reflexpr
λ₯Ό μ μ©νμ λ λμΌν νμ
μ΄ λ°νλλμ§ λ€λ₯Έ νμ
μ΄ λ°νλλμ§λ λͺ
μλμ§ μμμ΅λλ€. λ©ν-κ°μ²΄ νμ
μ΄ λΆμμ ν ν΄λμ€ νμ
μ λ°μνλ κ²½μ°, νΉμ νμ
λ³νμ μ μ©ν μ μμ΅λλ€.
λ©ν κ°μ²΄ νμ
μ
reflexpr
νΌμ°μ°μμ μΌλΆ μμ±μ νμ
νΉμ±μ΄λ νμ
λ³νμ ν΅ν΄ κ²μ¬ν μ μλλ‘ ν©λλ€.
μ€λ²λ‘λ ν΄κ²°
λ§μ½ postfix-expression μ΄ ν΄λμ€ νμ μΈ κ²½μ°, μ¦ function-call-expression μ e κ° function-call-expression e ( args ) μμ ν΄λμ€ νμ μΈ κ²½μ°, postfix-expression ( e )μ νμ μ λν user-defined conversion function μ μ¬μ©λμ΄μλ μ λ©λλ€.
λ§μ½ postfix-expression μ΄ ν΄λμ€ νμ μ΄ μλλΌλ©΄, μ΄λ μ€λ²λ‘λ ν΄κ²°μ μ μΌν κ²°κ³ΌμΈ ν¨μλ₯Ό μ§μ ν΄μΌ ν©λλ€.
struct Functor { void operator()(int) const; using fptr_t = void(*)(std::nullptr_t); operator fptr_t() const; }; using Meta0 = reflexpr(Functor{}(0)); // μ μ // using Meta1 = reflexpr(Functor{}(nullptr)); // μ€λ₯: λ³ν ν¨μ μ¬μ©λ¨
alias λ typedef μ μΈ, alias-declaration , λλ using-declaration μΌλ‘ λμ λ μ΄λ¦μ λλ€.
μν°ν°(entity) λλ λ³μΉ(alias)
B
κ° μν°ν° λλ λ³μΉ
A
μ λν΄
리νλ μ
κ΄λ ¨(reflection-related)
μ΄λΌκ³ νλ 쑰건μ λ€μκ³Ό κ°μ΅λλ€:
-
AμBκ° λμΌν κ°μ²΄ λλ λ³μΉμΈ κ²½μ°, -
Aκ° λ³μλ μ΄κ±°μμ΄κ³Bκ°Aμ νμ μΈ κ²½μ°, -
Aκ° μ΄κ±°νμ΄κ³Bκ°Aμ κΈ°λ° νμ μΈ κ²½μ°, -
Aκ° ν΄λμ€μ΄κ³Bκ°Aμ λ©€λ² λλ κΈ°λ³Έ ν΄λμ€μΈ κ²½μ°, -
Aκ°Bκ°μ²΄λ₯Ό μ§μ νλ λΉν νλ¦Ώ λ³μΉμΈ κ²½μ°, -
Aκ° μ μ λ€μμ€νμ΄μ€κ° μλκ³Bκ°Aλ₯Ό ν¬ν¨νλ ν΄λμ€λ λ€μμ€νμ΄μ€μΈ κ²½μ°, -
Aκ° κ΄νΈλ‘ λ¬ΆμΈ ννμ (B)μΈ κ²½μ°, -
Aκ° ν΄λ‘μ νμBμ λλ€ μΊ‘μ²μΈ κ²½μ°, -
Aκ° λλ€ μΊ‘μ²Bμ ν΄λ‘μ νμ μΈ κ²½μ°, -
Bκ° functional-type-conv-expressionAμ μν΄ μ§μ λ νμ μΈ κ²½μ°, -
Bκ° function-call-expressionAμ λν μ€λ²λ‘λ ν΄κ²°λ‘ μ νλ ν¨μμΈ κ²½μ°, -
Bκ° ν¨μAμ λ°ν νμ , λ§€κ°λ³μ νμ , λλ ν¨μ νμ μΈ κ²½μ°, λλ -
Bκ° κ°μ²΄ λλ λ³μΉXμ 리νλ μ κ΄λ ¨μ΄ μκ³Xκ°Aμ 리νλ μ κ΄λ ¨μ΄ μλ κ²½μ°.
λ°μ¬-κ΄κ³ κ΄κ³λ λ°μ¬μ μ΄κ³ μ΄νμ μ΄μ§λ§, λμΉμ μ΄μ§ μμ΅λλ€.
λΉκ³΅μμ μΌλ‘ λ§νμλ©΄,
B
κ°
A
μ 리νλ μ
κ΄λ ¨μ΄ μλ€λ κ²μ
B
κ°
A
μ μ μΈ λλ μ μμ μ°Έμ¬νλ€λ κ²μ μλ―Έν©λλ€.
reflexpr-specifier λ‘ νμλ νμ μ λ©ν-κ°μ²΄ νμ μ μμ±νλ νμ λ³νμ 0ν μ΄μ μ°μμ μΌλ‘ μ μ©νλ©΄, νΌμ°μ°μμ 리νλ μ κ΄λ ¨λ μν°ν°μ λ³μΉμ κ²μ¬ν μ μμ΅λλ€; μ΄λ¬ν λ©ν-κ°μ²΄ νμ μ ν΄λΉ 리νλ μ κ΄λ ¨ μν°ν°λ λ³μΉμ λ°μνλ€κ³ ν©λλ€.
struct X; struct B { using X = ::X; typedef X Y; }; struct D : B { using B::Y; }; //Β ::Xλ§μ΄ D::Yμ 리νλ μ κ΄λ ¨μ΄ μμΌλ©°, B::Xλ B::Yλ κ΄λ ¨μ΄ μμ
κΈ°ν
- reflexpr-operand λ‘ μ¬μ©λλ ννμμ νκ°λμ§ μλ ννμ(unevaluated expressions) μ΄λ©° μ μ¬μ μΌλ‘ μμ νκ°λ¨(potentially constant evaluated) μ λλ€.
-
μΊ‘μ² κΈ°λ³Έκ°(capture-default)μ μν΄
λλ€ ννμμμ μΊ‘μ²λλ λ³μ
μ κ²°μ μ λͺ©μ μΌλ‘ ν λ,
reflexprνΌμ°μ°μλ νκ°λμ§ μλ νΌμ°μ°μλ‘ κ°μ£Όλμ§ μμ΅λλ€. -
μ μ
μ μ₯ κΈ°κ°(storage duration)
μ κ°μ§λ ν¨μ λλ λ³μκ° λ©ν κ°μ²΄ νμ
Tλ‘ λ°μ¬λ λ, ν΄λΉ ν¨μλ λ³μμ μ£Όμλ₯Ό μ·¨νλ κ²μ²λΌ std :: experimental :: reflect :: get_pointer < T > νΉμνμ μν΄ ODR-μ¬μ©(odr-used) λ©λλ€. - μ΄ νμ μ λν λͺ¨λ μ°μ°μ΄ λμΌν μμ ννμ κ²°κ³Όλ₯Ό μμ±νλ ν, λ©ν κ°μ²΄ νμ μ μ μκ° μ¬λ¬ κ° μ‘΄μ¬ν μ μμ΅λλ€.
-
νμ
μ reflexpr-μ§μ μλ‘ νμλκ³ νΌμ°μ°μκ° λ€μ μ€ νλμΌ κ²½μ°
μμ‘΄μ (dependent)
μ
λλ€:
- νμ μμ‘΄μ ννμ(type-dependent expression) μ΄κ±°λ, μ μ΄λ νλμ νμ μμ‘΄μ μ§μ νμ ννμμ ν¬ν¨νλ (κ΄νΈλ‘ λλ¬μΈμΌ μ μλ) ν¨μν λ³ν ννμ(functional-type-conv-expression) μΈ κ²½μ°, λλ
- μμ‘΄μ νμ μ΄λ μλ €μ§μ§ μμ νΉμν(unknown specialization) μ λ©€λ², λλ κ° μμ‘΄μ μμ ννμ(value-dependent constant expression) μ μ§μ νλ κ²½μ°.
ν€μλ
미리 μ μλ κΈ°λ₯ ν μ€νΈ λ§€ν¬λ‘
|
__cpp_reflection
(reflection TS)
|
μ΅μ
201902
κ°μ Reflection TSκ° μ§μλ¨μ λνλ
λλ€
(λ§€ν¬λ‘ μμ) |
λΌμ΄λΈλ¬λ¦¬ μ§μ
κ°λ
|
ν€λμ μ μλ¨
<experimental/reflect>
|
|
|
λ€μμ€νμ΄μ€μ μ μλ¨
std::experimental::reflect
|
|
|
μΈλΌμΈ λ€μμ€νμ΄μ€μ μ μλ¨
std::experimental::reflect::v1
|
|
|
(reflection TS)
|
λ©ν-κ°μ²΄ νμ
μΈ νμ
μ λͺ
μν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ©ν κ°μ²΄ μνμ€ νμ
μμ λͺ
μν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν
νλ¦Ώ λ§€κ°λ³μ μ€μ½νλ₯Ό λ°μν¨μ μ§μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ°κ΄λ (λΉ κ°μΌ μλ μλ) μ΄λ¦μ κ°μ§ μν°ν°λ λ³μΉμ λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ νμ
λ³μΉ, λ€μμ€νμ΄μ€ λ³μΉ λλ using μ μΈμΌλ‘ λμ
λ λ³μΉμ λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν΄λμ€μ
member-declaration
μ λ°μν¨μ μ§μ ν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ΄κ±°μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ³μλ λ°μ΄ν° λ©€λ²λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄
RecordMember
,
Enumerator
, λλ
Variable
λ₯Ό λ§μ‘±νκ±°λ, κΈλ‘λ² λ€μμ€νμ΄μ€ μ΄μΈμ λ€μμ€νμ΄μ€λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ νμ
μ κ°μ§ μν°ν°λ₯Ό λ°μν¨μ μ§μ ν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ€μμ€νμ΄μ€λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ μ λ€μμ€νμ΄μ€λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λΉ-μ λμ¨ ν΄λμ€ νμ
μ λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ΄κ±°ν νμ
μ λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν΄λμ€ νμ
μ λ°μν¨μ μ§μ ν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ€μμ€νμ΄μ€, ν΄λμ€, μ΄κ±°ν, ν¨μ, ν΄λ‘μ νμ
, ν
νλ¦Ώ λ§€κ°λ³μ μ€μ½νλ₯Ό λ°μν¨μ μ§μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ νμ
μ λ°μν¨μ μ§μ ν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ΄κ±°μ λλ constexpr λ³μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄
get_base_classes
λ‘λΆν° μ»μ μ§μ κΈ°λ³Έ ν΄λμ€λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν¨μ λ§€κ°λ³μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν¨μ(μμ±μμ μλ©Έμ ν¬ν¨)λ₯Ό λ°μν¨μ λͺ
μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ννμμ λ°μν¨μ λͺ
μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ κ΄νΈλ‘ λ¬ΆμΈ ννμμ λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄
function-call-expression
λ₯Ό λ°μνλ€λ κ²μ λͺ
μν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄
functional-type-conv-expression
μ λ°μνλ€λ κ²μ λͺ
μν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ ν¨μ(μμ±μμ μλ©Έμ μ μΈ)λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ©€λ² ν¨μ(μμ±μμ μλ©Έμ μ μΈ)λ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ νΉλ³ λ©€λ² ν¨μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μμ±μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μλ©Έμλ₯Ό λ°μν¨μ μ§μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ°μ°μ ν¨μ λλ λ³ν ν¨μλ₯Ό λ°μν¨μ μ§μ ν¨
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λ³ν ν¨μλ₯Ό λ°μν¨μ μ§μ ν©λλ€
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λΉμ λ€λ¦ λλ€μ ν΄λ‘μ νμ
μ λ°μν¨μ μ§μ
(concept) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ λλ€ μΊ‘μ²λ₯Ό λ°μν¨μ μ§μ
(concept) |
λ©ν κ°μ²΄ μ°μ°
|
ν€λμ μ μλ¨
<experimental/reflect>
|
|
|
λ€μμ€νμ΄μ€μ μ μλ¨
std::experimental::reflect
|
|
|
μΈλΌμΈ λ€μμ€νμ΄μ€μ μ μλ¨
std::experimental::reflect::v1
|
|
|
|
|
(reflection TS)
|
λ λ©ν-κ°μ²΄ νμ
μ΄ λμΌν μν°ν°λ λ³μΉμ λ°μνλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ μ μΈμ΄ μμΉν μΆμ λ μ€ λ²νΈλ₯Ό νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ μ μΈμ λν ꡬν μ μ μ΄ λ²νΈλ₯Ό νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ μ μΈμ΄ μμΉν μΆμ νμΌ μ΄λ¦μ νλ
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ©ν κ°μ²΄ μνμ€μ ν¬κΈ°λ₯Ό νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
μνμ€ λ΄ μ§μ λ μΈλ±μ€λ₯Ό κ°μ§ λ©ν-κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ©ν κ°μ²΄ μνμ€μ ν
νλ¦Ώμ μ μ©ν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ κ°μ²΄ λλ λ³μΉμ΄ μ΄λ¦ μλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ λΉνμ μ΄λ¦μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν°λ λ³μΉμ ꡬν μ μ λμ€νλ μ΄ μ΄λ¦μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ³μΉμ μ°κ΄λ μν°ν°λ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ μν°ν°λ λ³μΉμ νμ
μ λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ μ΄κ±°ν νμ
μ λ°μνλμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ union νμ
μ λ°μνλμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ©ν κ°μ²΄ νμ
μ΄ κ°κ°
class
λλ
struct
ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈλ λΉ-곡μ©μ²΄ ν΄λμ€ νμ
μ λ°μνλμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ μν°ν° λλ λ³μΉμ λ²μλ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
μ£Όμ΄μ§ κΈ°λ³Έ ν΄λμ€ κ΄κ³μμ κΈ°λ³Έ ν΄λμ€λ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ©€λ² λλ κΈ°λ³Έ ν΄λμ€κ° publicμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ μ
λ λ©€λ² λλ κΈ°λ³Έ ν΄λμ€κ° protectedμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ μ
λ λ©€λ² λλ κΈ°λ³Έ ν΄λμ€κ° privateμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
λ°μ¬λ ν΄λμ€μ public, μ κ·Ό κ°λ₯, λλ λͺ¨λ λ°μ΄ν° λ©€λ²λ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
λ°μλ ν΄λμ€μ public, μ κ·Ό κ°λ₯, λλ λͺ¨λ λ©€λ² ν¨μλ€μ λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
(reflection TS)
|
λ°μλ ν΄λμ€μ λͺ¨λ μμ±μλ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μλ ν΄λμ€μμ μ μΈλ λͺ¨λ μ°μ°μ ν¨μμ λ³ν ν¨μλ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ μ
λ ν΄λμ€μ μλ©Έμλ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
λ°μλ ν΄λμ€μ public, μ κ·Ό κ°λ₯, λλ λͺ¨λ μ€μ²© νμ
λλ λ©€λ² typedefλ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
λ°μλ ν΄λμ€μ public, μ κ·Ό κ°λ₯ν, λλ λͺ¨λ κΈ°λ³Έ ν΄λμ€λ€μ λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
|
(reflection TS)
|
λ°μ¬λ μ΄κ±°νμ΄ λ²μ μ§μ μ΄κ±°νμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μ΄κ±°νμ μ΄κ±°μλ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ μ΄κ±°νμ κΈ°λ° νμ
μ λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
μμ ννμμΈ λ°μλ λ³μμ κ°μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ³μκ°
thread_local
λ‘ μ μΈλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
리νλ μ
λ λ§€κ°λ³μκ° κΈ°λ³Έ μΈμλ₯Ό κ°μ§λμ§ μ¬λΆλ₯Ό κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ ν¨μμ λ§€κ°λ³μλ₯Ό λ°μνλ λ©ν κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ ν¨μμ λ§€κ°λ³μ λͺ©λ‘μ΄ μλ΅ λΆνΈ λ§€κ°λ³μλ₯Ό ν¬ν¨νλμ§ μ¬λΆλ₯Ό νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ νΈλ ν¨μκ° non-throwingμΈμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ μ
λ ν¨μκ° μμ λμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ³μ λλ ν¨μκ° constexprμΈμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
리νλ μ
λ λ€μμ€νμ΄μ€λ ν¨μκ° μΈλΌμΈμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ κ΄νΈμμ κ΄νΈ μλ ννμμ λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ
function-call-expression
μμ
ν¨μλ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ
functional-type-conv-expression
μμ
μμ±μλ₯Ό λ°μνλ λ©ν κ°μ²΄ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ³μλ ν¨μμ μ£Όμλ₯Ό μ»κ±°λ, λ°μ¬λ λΉμ μ λ©€λ²μ λν λ©€λ² ν¬μΈν° κ°μ μ»μ
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
리νλ μ
λ λ©€λ² ν¨μκ° κ°κ°
const
,
volatile
,
&
, λλ
&&
νμ μλ‘ μ μΈλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
(reflection TS)
|
리νλ μ
λ λ©€λ² ν¨μκ° κΈ°λ³Έ ν΄λμ€μ λ©€λ² ν¨μλ₯Ό μ€λ²λΌμ΄λνλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ ν΄λμ€ λλ λ©€λ² ν¨μκ°
final
μΌλ‘ νμλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ³μκ° μ μ μ μ₯ κΈ°κ°μ κ°μ§λμ§, λλ λ°μ¬λ λ©€λ² ν¨μκ° μ μ μΈμ§ κ²μ¬ν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
리νλ μ
λ νΉμ λ©€λ² ν¨μκ° μμμ μΌλ‘ μ μΈλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μλ νΉλ³ λ©€λ² ν¨μκ° μ²« λ²μ§Έ μ μΈμμ κΈ°λ³Έκ°μΌλ‘ μ§μ λμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ μμ±μ λλ λ³ν ν¨μκ°
explicit
λ‘ μ μΈλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ λ©€λ² ν¨μκ° κ°μ ν¨μμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
리νλ μ
λ λ©€λ² ν¨μκ° μμ κ°μ ν¨μμΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
λ°μ¬λ ν΄λ‘μ νμ
μ μΊ‘μ²λ€μ λ°μνλ λ©ν-κ°μ²΄ μνμ€ νμ
μ νλν¨
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ ν΄λ‘μ νμ
μ λλ€ ννμμ μΊ‘μ² κΈ°λ³Έκ°μ΄ κ°κ°
=
λλ
&
μΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ ν΄λ‘μ νμ
μ
operator()
κ°
const
λ‘ μ μΈλμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
|
|
(reflection TS)
|
리νλ μ
λ λλ€ μΊ‘μ²κ° λͺ
μμ μΌλ‘ μΊ‘μ²λμλμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
|
(reflection TS)
|
λ°μ¬λ λλ€ μΊ‘μ²κ° μ΄κΈ°ν μΊ‘μ²μΈμ§ νμΈν©λλ€
(ν΄λμ€ ν νλ¦Ώ) |
λΌμ΄λΈλ¬λ¦¬ κΈ°λ₯ ν μ€νΈ λ§€ν¬λ‘
|
ν€λ νμΌμ μ μλ¨
<experimental/reflect>
|
|
|
__cpp_lib_reflection
(reflection TS)
|
μ΅μ
201902
κ°μ Reflection TSμ μ§μ λΌμ΄λΈλ¬λ¦¬κ° μ§μλ¨μ λνλ
λλ€
(λ§€ν¬λ‘ μμ) |
κ°λ μΆ©μ‘±
λ€μ νλ νΌμ°μ°μλ₯Ό λ°μνλ λ©ν-κ°μ²΄ νμ μ΄ Reflection TSμμ λμ ν κ°λ λ€μ λ§μ‘±νλμ§ μ¬λΆλ₯Ό λμ΄ν©λλ€.
| μΉ΄ν κ³ λ¦¬ |
reflexpr
νΌμ°μ°μ
|
μΆ©μ‘±νλ κ°λ |
|---|---|---|
| νμ | class-name designating a union |
reflect::Union
|
| class-name designating a closure type |
reflect::Lambda
|
|
| class-name designating a non-union class |
reflect::Record
|
|
| enum-name |
reflect::Enum
|
|
| template type-parameter |
reflect::Type
,
reflect::Alias
|
|
| decltype-specifier |
reflect::Type
,
reflect::Alias
|
|
| type-name introduced by a using-declaration |
reflect::Type
,
reflect::Alias
,
reflect::ScopedMember
|
|
| any other typedef-name |
reflect::Type
,
reflect::Alias
|
|
| any other type-id |
reflect::Type
|
|
| λ€μμ€νμ΄μ€ | namespace-alias |
reflect::Namespace
,
reflect::Alias
|
| the global namespace |
reflect::GlobalScope
|
|
| any other namespace |
reflect::Namespace
|
|
| ννμ | the name of a data member |
reflect::Variable
|
| the name of a variable |
reflect::Variable
|
|
| the name of an enumerator |
reflect::Enumerator
|
|
| the name of a function parameter |
reflect::FunctionParameter
|
|
| the name of a captured entity |
reflect::LambdaCapture
|
|
| parenthesized expression |
reflect::ParenthesizedExpression
|
|
| function-call-expression |
reflect::FunctionCallExpression
|
|
| functional-type-conv-expression |
reflect::FunctionalTypeConversion
|
id-expression ννμ νΌμ°μ°μκ° μμ ννμμΈ κ²½μ°, reflexpr-specifierλ‘ μ§μ λ νμ
μ λν
reflect::Constant
λ₯Ό λ§μ‘±ν©λλ€.
λ§μ½ reflexpr-νΌμ°μ°μκ° ν΄λμ€ λ©€λ²λ₯Ό μ§μ νλ€λ©΄, reflexpr-μ§μμλ‘ ννλλ νμ
μ λν
reflect::RecordMember
λ₯Ό λ§μ‘±ν©λλ€.
μ°Έκ³ νλͺ©
|
μΌλΆ νμ
μ μ 보λ₯Ό ν¬ν¨νλ©°, typeid μ°μ°μκ° λ°ννλ ν΄λμ€
(ν΄λμ€) |
|
|
(C++11)
|
μ»΄νμΌ νμ νμ μ 보 μ νΈλ¦¬ν° |