рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдореИрдЬрд┐рдХ

рдЕрдкреНрд░рд┐рдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдФрд░ рднреА рд╕рд░рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреНрд▓рд╛рд╕ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдПрд╕) рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЙрдкреА рдпрд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рднреА рд╣реИред рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдПрдХ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ (рдпрд╣ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рд┐рдп рд╣реИ, рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд░реНрд╖реЛрдВ рддрдХ рд░рд╣ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдЖрдорддреМрд░ рдкрд░, рдпрджрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд╕рдВрд╢реЛрдзрди рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдореИрдХреНрд░реЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рдХреЙрдкреА рдХрд░рдирд╛, рдХреНрд░рдорд╛рдВрдХрди, рдкреНрд░рддрд┐рдмрд┐рдВрдм) рдХреЛ рдЕрдкрдиреЗ рдКрдкрд░ рд▓реЗ рд▓реЗрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЪрд░ рдХреЛ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХрдХреНрд╖рд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд)ред

рдпрд╣ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class TData { public: int Number; float Factor; BEGIN_FIELDS FIELD(Number, 0) FIELD(Factor, 1.0f) END_FIELDS }; 

рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб, рдЙрдирдХреЗ рдирд╛рдо рдФрд░ рдмрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдиреЛрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдгред

рдПрдХ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдирд╛рдо рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 enum TModelType { Car, Weapon, Human }; #define REFLECT_MODEL_TYPE(mac_value) Register(mac_value, #mac_value); void TModelTypeReflection::RegisterTypes() { REFLECT_MODEL_TYPE(Car) REFLECT_MODEL_TYPE(Weapon) REFLECT_MODEL_TYPE(Human) } 

TModelTypeReflection рдШреЛрд╖рдгрд╛ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рдардХ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рднреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЖрдк рд╕рднреА рд╕рдорд╛рди рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 #define DECLARE_MODEL_TYPE(mac_value, mac_next) \ mac_value, \ mac_next \ Register(mac_value, #mac_value); #define END_MODEL_TYPE \ }; void TModelTypeReflection::RegisterTypes() { enum TModelType { DECLARE_MODEL_TYPE(Car, DECLARE_MODEL_TYPE(Weapon, DECLARE_MODEL_TYPE(Human, END_MODEL_TYPE))) } 

DECLARE_MODEL_TYPE рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдкрд╣рд▓реЗ рдПрдиреНрдпреВрдорд░реЗрд╢рди рддрддреНрд╡реЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдлрд┐рд░ END_MODEL_TYPE рд╕реЗ рдХреЛрдб рдПрдиреНрдпреВрдорд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдбрд░ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреА, рдХреЗрд╡рд▓ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ (рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХрд╛рд░реНрдп рдмреНрд▓реЙрдХ рднреА рдХрд░реЗрдЧрд╛;) )ред
рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдХреЛрдб рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХреЗрд╡рд▓ рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдирд╛ рд╣реИ:

рдХрд┐рд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рднреА рд╣реИрдВред

Source: https://habr.com/ru/post/In148494/


All Articles