рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП C ++ рднрд╛рд╖рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдПрдХ рдХреЙрдкреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдорд▓реЛрдВ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдХреЛ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ std :: рд╡реЗрдХреНрдЯрд░ рдпрд╛ std :: stringред
рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдпрд╣ == рдФрд░! = рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реА ++ рд╕рдВрдХрд▓рдХ, рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдРрд╕рд╛ рд╕рдВрдЧрдарди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЦрддрд░рдирд╛рдХ рд╣реИред рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддреБрд▓рдирд╛ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдХрдард┐рди рдирд┐рджрд╛рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ (* .h рдФрд░ * .cpp) рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред
C ++ рдореЗрдВ рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рдФрд░ рдХреМрди рд╕реЗ рд╕рджрд╕реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
2000 рдХреЗ рджрд╢рдХ рдХреЗ рдордзреНрдп рдореЗрдВ, рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдирддреАрдЬрддрди, рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реА ++ рдирд┐рд░реНрдорд╛рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрд╛рдж рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдиреЗ рдЕрдиреНрдп рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛: рдбреЗрдЯрд╛ рдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рддрд╛ рд╣реВрдВред
рдЕрдиреНрдп рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди
рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ:
- рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧред рд╕рд╛рдорд╛рдиреНрдп рд╕реА ++ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╖рдо рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows OLE рд╕реЗ VARIANT рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд╕рджрд╕реНрдп рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдо, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рдордп рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧрддреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ object.member_name рдпрд╛ pObject-> рд╕рджрд╕реНрдп_рдирд╛рдо рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рдХреБрдЫ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред (тАЬрд╕рджрд╕реНрдп_рдирд╛рдотАЭ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдореЗрдВ рдПрдХ рд░реИрдЦрд┐рдХ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ: рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирд┐рдпрдорд┐рдд (рд╕реНрдерд┐рд░) рд╕рдВрд░рдЪрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИред
- рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░, рдЕрд░реНрдерд╛рддреН рдмрдврд╝рд╛рд╡рд╛ :: рдлреНрдпреВрдЬрди :: рдореИрдк рдХрдВрдЯреЗрдирд░ред рдпрд╣рд╛рдВ, рд╕рднреА рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрд╛ред рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: at_key <рд╕рджрд╕реНрдп_рдиреЗрдореА> (рдСрдмреНрдЬреЗрдХреНрдЯ)ред
- C ++ рдХреЛрдб рдЬрдирд░реЗрд╢рдиред C ++ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЖрджрд░реНрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдореИрдХреНрд░реЛ рд╕реЙрд▓реНрдпреВрд╢рди
рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЙрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд░рди рдЯрд╛рдЗрдо рдкрд░ рдХреЛрдИ рд▓реЛрдб рдирд╣реАрдВ рд╣реИред
- рдкреНрд░рдкрддреНрд░ object.member_name рдпрд╛ pObject-> Member_name рдХреЗ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╕рдВрднрд╡ рдерд╛ред
- рдлреЙрд░реНрдо рдУ (1) рдХрд╛ рдореЗрдореЛрд░реА рд▓реЛрдбред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдСрдЯреЛ-рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдирд┐рд░рдВрддрд░ (рдЫреЛрдЯреА) рдореЗрдореЛрд░реА рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИред
рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрд╡рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐, рдЬреЛ рдХрд┐ рдЗрдиреНрдЯреЗрд▓рд┐рд╕реЗрдВрд╕ рдпрд╛ рдбреЙрдХреНрд╕реАрдЬреЗрди рдЬреИрд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред
- рдкреНрд░рдкрддреНрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрднрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ a = {1,2,3}ред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрди рд╕рд╛рдзрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ:
struct MANPARAMS { std::string name; int age; std::vector<std::string> friend_names; double karma; };
рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯрд░реНрдо рдСрдкрд░реЗрд╢рди рд╡рд╛рд▓реА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ:
class AUTO_MANPARAMS { PARAMSTRUCT_DECLARE_BEGIN(AUTO_MANPARAMS); public: DECLARE_MEMBER_PARAMSTRUCT(std::string, name); DECLARE_MEMBER_PARAMSTRUCT(int, age); DECLARE_MEMBER_PARAMSTRUCT(std::vector<std::string>, friend_names); DECLARE_MEMBER_PARAMSTRUCT(double, karma); };
рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ * .cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореИрдХреНрд░реЛ рдХреЙрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
PARAMFIELD_IMPL(AUTO_MANPARAMS);
рд╡рд╣ рд╕рдм рд╣реИ! рдЕрдм рдЖрдк рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдЪрд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рдорд╛рдирддрд╛ рдпрд╛ рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void men(void) { AUTO_MANPARAMS man1, man2; man1.name = тАЬJohn SmithтАЭ; man1.age = 18; man1.karma = 0; man2.name = тАЬJohn DoeтАЭ; man2.age = 36; man2.karma = 1; man2.friends.push_back(тАЬSergud SmithтАЭ); if(man1 == man2) printf(тАЬKu-ku!\nтАЭ); }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ PARAMSTRUCT_DECLARE_BEGIN (x) рдореИрдХреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрдерд┐рд░ рд╕реЗрд╡рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рджрд╕реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, рджреВрд╕рд░реЗ рдореИрдХреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, DECLARE_MEMBER_PARAMSTRUCT (рдкреНрд░рдХрд╛рд░, рдирд╛рдо), рдЬреЛ рд╕рджрд╕реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕реЗрд╡рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдЪрд╛рд░:
- рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рджрд╕реНрдп рдХрд╛ рдПрдХ рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдп рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
- рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рдПрдХ рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗрд╡рд▓ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
- рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХреА рдирдХрд▓ рди рдХреА рдЬрд╛ рд╕рдХреЗред
1. рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдСрдЯреЛ-рдкреАрдврд╝реА
рдРрд╕рд╛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╕рджрд╕реНрдп рд╣реИ рдФрд░ "рдЗрд╕рдХреЗ" рдбреЗрдЯрд╛ рд╕рджрд╕реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореИрдХреНрд░реЛ DECLARE_MEMBER_PARAMSTRUCT (рдкреНрд░рдХрд╛рд░, рдирд╛рдо) рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:
bool comp##name(const ThisParamFieldClass& a) const \ { \ return name == a.name; \ } \
рдЬрд╣рд╛рдБ ThisParamFieldClass рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╣реЗрдб рдореИрдХреНрд░реЛ рдореЗрдВ рдЯрд╛рдЗрдкрдбрд┐рдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
2. рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рд╕рд░рдгреА
рд╣реЗрдб рдореИрдХреНрд░реЛ PARAMSTRUCT_DECLARE_BEGIN (x) рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдРрд░реЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ:
#define PARAMSTRUCT_DECLARE_BEGIN(x) \ private: \ typedef x ThisParamFieldClass; \ typedef bool (ThisParamFieldClass::*ComFun)(const ThisParamFieldClass& a) const; \ struct MEM_STAT_DATA \ { \ std::string member_name; \ ComFun comfun; \ }; \
рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд░рдгреА рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
static std::vector<MEM_STAT_DATA> stat_data; \
рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рднреА рдпрд╣рд╛рдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public: \ bool operator==(const ThisParamFieldClass& a) const; \ bool operator!=(const ThisParamFieldClass& a) const { return !operator==(a); } \
рдПрдХ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдореИрдХреНрд░реЛ (PARAMFIELD_IMPL) рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рднрд░реЗ рд╣реБрдП stat_data рд╕рд░рдгреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рддреБрдЪреНрдЫ рд╣реИ: рдЖрдкрдХреЛ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдХреЗрд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрдкрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рди рдХреЗрд╡рд▓ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирд╡ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рд▓реЛрдб рдХрд░рдирд╛ред
3. рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдореЗрдВ рднрд░рдирд╛
рдпрд╣ рд╕рд░рдгреА stat_data рдХреЛ рднрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЪреВрдВрдХрд┐ рд╕рджрд╕реНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ DECLARE_MEMBER_PARAMSTRUCT рдореИрдХреНрд░реЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд╣реАрдВ рднреА рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ (рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ) рдЖрдмрд╛рдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрд╕рдЯреАрдбреА :: рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рд╣реИ - рдпрд╣ рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ stat_data рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
class cl##name \ { \ public: \ cl##name(void) \ { \ if(populate_statdata) \ { \ MEM_STAT_DATA msd = \ { \ #name, \ &ThisParamFieldClass::comp##name \ }; \ stat_data.push_back(msd); \ } \ } \ }; \ cl##name ob##name;
рдЬрд╣рд╛рдБ populate_statdata рдПрдХ рд╕реНрдереИрддрд┐рдХ рдзреНрд╡рдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣реЗрдб рдореИрдХреНрд░реЛ рдФрд░ рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ stat_data рд╕рд░рдгреА рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рднрд░реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рддрдВрддреНрд░ populate_statdata = true рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рд╕рджрд╕реНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рднрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, populate_statdata = false рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рджрд╕реНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдЕрдм рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рд░ рдмрд╛рд░ рдХреБрдЫ рд╕рдордп рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо populate_statdata рдзреНрд╡рдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдирд╣реАрдВ рдмрдврд╝рддреА рд╣реИ: рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, populate_statdata: рдлреНрд▓реИрдЧ рдХрдВрдЯреНрд░реЛрд▓ рддрдВрддреНрд░ рдХреЛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣реЗрдб рдореИрдХреНрд░реЛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class VcfInitializer \ { \ public: \ VcfInitializer(void); \ }; \ static VcfInitializer vcinit;
рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди PARAMFIELD_IMPL (x) рдореИрдХреНрд░реЛ рдореЗрдВ рд╣реИ:
x::VcfInitializer::VcfInitializer(void) \ { \ x::populate_statdata = true; \ ThisParamFieldClass dummy; \ x::populate_statdata = false; \ } \
рдкреВрд░реНрдг рд╕реНрдереВрд▓ рдкрд╛рда
#define PARAMSTRUCT_DECLARE_BEGIN(x) \ private: \ typedef x ThisParamFieldClass; \ typedef bool (ThisParamFieldClass::*ComFun)(const ThisParamFieldClass& a) const; \ struct MEM_STAT_DATA \ { \ std::string member_name; \ ComFun comfun; \ }; \ static std::vector<MEM_STAT_DATA> stat_data; \ static bool populate_statdata; \ public: \ bool operator==(const ThisParamFieldClass& a) const; \ bool operator!=(const ThisParamFieldClass& a) const { return !operator==(a); } \ private: \ class VcfInitializer \ { \ public: \ VcfInitializer(void); \ }; \ static VcfInitializer vcinit; #define DECLARE_MEMBER_PARAMSTRUCT(type,name) \ public: \ type name; \ private: \ bool comp##name(const ThisParamFieldClass& a) const \ { \ return name == a.name; \ } \ class cl##name \ { \ public: \ cl##name(void) \ { \ if(populate_statdata) \ { \ MEM_STAT_DATA msd = \ { \ #name, \ &ThisParamFieldClass::comp##name, \ }; \ stat_data.push_back(msd); \ } \ } \ }; \ cl##name ob##name; #define PARAMFIELD_IMPL(x) \ std::vector<x::MEM_STAT_DATA> x::stat_data; \ bool x::populate_statdata = false; \ x::VcfInitializer x::vcinit; \ x::VcfInitializer::VcfInitializer(void) \ { \ x::populate_statdata = true; \ ThisParamFieldClass dummy; \ x::populate_statdata = false; \ } \ bool x::operator==(const x& a) const \ { \ bool r = true; \ for(size_t i=0; r && i<stat_data.size(); i++) \ { \ r = (this->*stat_data[i].comfun)(a); \ } \ return r; \ }
рдирд┐рд╖реНрдХрд░реНрд╖
рдЙрдкрд░реЛрдХреНрдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдФрд░ рдЕрдиреНрдп рд╢рдмреНрджрд╛рд╡рд▓реА рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ред рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддреА рд╣реИред рдмрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдЙрд╕ рд╕рджрд╕реНрдп рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛, рдмрдЪрдд рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддрд╛ рд╣реИред