рд╕реА ++ рдФрд░ рдкрд╛рдпрдерди рдХрд╛ рд╕рдВрдпреЛрдЬрдиред рдмреВрд╕реНрдЯ.рдкрд╛рдЗрдерди рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВред рдПрдХ рднрд╛рдЧ

Boost.Python рд╣рд░ рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ 5+ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЖрдк C ++ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ Python рдХреЗ рд▓рд┐рдП рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдпрджрд┐ рдЖрдк C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдХ рджреЗрд╢реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП Python рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
Boost.Python рдореЗрдВ рд╕рдмрд╕реЗ рдХрдард┐рди рдмрд╛рдд рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ C ++ рдФрд░ Python рджреЛ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдВрдХреНрд╢рди рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛: рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдпрд╛ рдорд╛рди рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдХреЙрдкреА рджреЗрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рд╕ рдХреЛ Python рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВред рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдпрд╛ C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЖрд╡рд░рдг рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдУрд╡рд░рд▓реЛрдб рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП, C ++ рдореЗрдВ рдЧреИрд░-рдореМрдЬреВрдж рд╣реИрдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗред
рдореИрдВ рдпрд╣ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореИрдВ рдЗрди рдореВрд▓рднреВрдд рднрд╛рд╖рд╛рдУрдВ рдХреА рдмрд╛рддрдЪреАрдд рдХреА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрдерд╛рд╕рдВрднрд╡ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╣рд░ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рди рдЪрдврд╝реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореВрд▓ рдмрд╛рддреЗрдВ рджреЗрдЦреЗрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрдирдХреА рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛



рдкрд░рд┐рдЪрдп


рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ C ++ рдореЗрдВ рдбрд╛рдпрдиреЗрдорд┐рдХ-рд▓рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдкрд╣рд▓реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓рд┐рдП рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рднреАред
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдпрд╛ рд▓рд┐рдирдХреНрд╕ рдУрдПрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдиреАрдЪреЗ рдЖрддреА рд╣реИрдВред рдбрд┐рд╕реНрдХ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдмреВрд╕реНрдЯ рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХреНрд░рдо рдореЗрдВ рджреЛ рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ:
bootstrap b2 --build-type=complete stage 

X64 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд░реНрдХ рдкрддрд╛-рдореЙрдбрд▓ = 64 рдЬреЛрдбрд╝реЗрдВ
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдкрд╛рдпрдерди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдиреЗ рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмреВрд╕реНрдЯ.рдкрд╛рдЗрдерди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рд╛рде-рдкрд╛рдпрдерди
рдЕрд░реНрдерд╛рддреН, рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рд╡рд╛рд▓реЗ Boost.Python рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд▓рд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
 b2 --build-type=complete address-model=64 --with-python stage 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ Python x64 рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рддреЛ x64 рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЛ 64-рдмрд┐рдЯ рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдпрджрд┐ рдЖрдк рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ Boost.Python рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддреЛ --with-python рд╕реНрд╡рд┐рдЪ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЖрдкрдХрд╛ рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рддреЛ рдореИрдВ рд╡рд┐рд╕реНрддреГрдд рдмреВрд╕реНрдЯ.рдкрд╛рдЗрдерди рдЕрд╕реЗрдВрдмрд▓реА рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж, рдЖрдк Boost \ рд╕реНрдЯреЗрдЬ \ lib рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд Boost.Python рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреЗрдЦреЗрдВрдЧреЗ, рд╣рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ


рд╣рдо C ++ рдореЗрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд INCLUDE Python рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ Boost рд░реВрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕рд╛рде рд╣реА Python \ libs рдФрд░ Boost \ stage \ lib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдЗрд╡реЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди example.pyd рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдореЗрдВ $ (TargetPath) рднреА рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдВрдХрд▓рд┐рдд Boost.Python рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рд╣реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдПрдХ рдХрдорд╛рдВрдб рдореЗрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 from example import * 

64-рдмрд┐рдЯ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдкрд░ x64 рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред

рд╕рд░рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджрд╛ рд╡рд░реНрдЧ


рддреЛ, рдЪрд▓рд┐рдП рдПрдХ рд╕рд╛рде рддреАрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
some.h
some.cpp
wrap.cpp

рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ some.h рдФрд░ some.cpp рдХреЗ рд╕рд╛рде рд╣рдо рдХреБрдЫ рдЕрджреНрднреБрдд рдХреБрдЫ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рдкреЗрдЯреЗрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП wra.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП, wra.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, <рдмрдврд╝рд╛рд╡рд╛ / python.ppp рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдореИрдХреНрд░реЛ BOOST_PYTHON_MODULE (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред ) {...}, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ :: рдЕрдЬрдЧрд░ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдорд╛рд░рд╛ рднрд╡рд┐рд╖реНрдп рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 #include <boost/python.hpp> ... using namespace boost::python; ... BOOST_PYTHON_MODULE( example ) { ... } ... 


рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫред рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЪрдорддреНрдХрд╛рд░ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреБрдирд┐рдпрд╛рджреА рддрдВрддреНрд░реЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 private: int mID; string mName; 

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд╛рдо рдФрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдпрд╣ рд╕рд░рд▓ рд╡рд░реНрдЧ рдмрд╣реБрдд рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдорд╛рдирдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ, рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд░, рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐ NOT_AN_IDENTIFIER рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рднреА рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ:
 public: static const int NOT_AN_IDENTIFIER = -1; 

рдмреЗрд╢рдХ, рдЗрд╕ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╣рдо рдПрдХ рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рджреЛрдиреЛрдВ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
  Some(); Some( int some_id, string const& name ); 

рдХреБрдЫред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЗрди рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдЗрдП рд╣рдо рдПрдХ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВ:
 Some::Some() : mID(NOT_AN_IDENTIFIER) { } Some::Some( int some_id, string const& name ) : mID(some_id), mName(name) { } 

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдХреБрдЫ рд╡рд░реНрдЧ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдкрд╛рдпрдерди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдЖрд╡рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
 BOOST_PYTHON_MODULE( example ) { class_<Some>( "Some" ) .def( init<int,string>( args( "some_id", "name" ) ) ) ; } 

рдпрд╣ рдПрдХ рдмреЗрдИрдорд╛рди рдСрдкреНрдЯрд┐рдХрд▓ рднреНрд░рдо рдФрд░ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИ :: python :: class_ рдЯреЗрдореНрдкрд▓реЗрдЯ, рдЬреЛ Python C-API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ Python рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЬрдЯрд┐рд▓ рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреАрдлрд╝ () рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдкреАрдЫреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВрдЧреЗред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдпрд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рд╡реЗ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВред
рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдЪрдорддреНрдХрд╛рд░ рд╡рд░реНрдЧ рдХреЗ "рд╕рдмрд╕реЗ рдЕрдореАрд░" рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ some.h рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдХреЛрдб рд╣реИ:
 #pragma once #include <string> using std::string; class Some { public: static const int NOT_AN_IDENTIFIER = -1; Some(); Some( int some_id, string const& name ); int ID() const; string const& Name() const; void ResetID(); void ResetID( int some_id ); void ChangeName( string const& name ); void SomeChanges( int some_id, string const& name ); private: int mID; string mName; }; 


рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд╛рдлреА рдХрдо рдерд╛, рдЪрд▓реЛ рдХреБрдЫ рдХреЛрдб рджреЗрддреЗ рд╣реИрдВ:
 #include "some.h" Some::Some() : mID(NOT_AN_IDENTIFIER) { } Some::Some( int some_id, string const& name ) : mID(some_id), mName(name) { } int Some::ID() const { return mID; } string const& Some::Name() const { return mName; } void Some::ResetID() { mID = NOT_AN_IDENTIFIER; } void Some::ResetID( int some_id ) { mID = some_id; } void Some::ChangeName( string const& name ) { mName = name; } void Some::SomeChanges( int some_id, string const& name ) { mID = some_id; mName = name; } 

рдЦреИрд░, рдпрд╣ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд░реИрдк рдлрд╛рдЗрд▓ рдореЗрдВред
рдкрд╣рд▓реА рдХреБрдЫ :: ID () рд╡рд┐рдзрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдШреВрдорддреА рд╣реИ:
  .def( "ID", &Some::ID ) 

рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ:
  .def( "Name", &Some::Name, return_value_policy<copy_const_reference>() ) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ C ++ рдореЗрдВ рд╡рд┐рдзрд┐ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдпрд╛ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рддреА рд╣реИ рддреЛ рдкрд╛рдпрдерди рдХреЛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд░реВрд░ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ (рдЬреАрд╕реА) рдХреЛ рд╕рдм рдХреБрдЫ рдЬреЛ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣реИ, рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдЖрдкрдХреЛ рд╕реВрдЪрдХ рдпрд╛ рд▓рд┐рдВрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рд╕рдм рдХреБрдЫ рдЙрджрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╕реА рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рджреБрдЦ рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдпрджрд┐ рд╡рд╣ C ++ рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП return_value_policy рдХреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдпрд╛ рдПрдХ рдФрд░ рд░рд┐рдЯрд░реНрди_рд╡рд▓реНрдпреВ_рдкреЛрд▓рд┐рд╢ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдордп рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ, рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝реЗрдВ рдФрд░ рдЕрдкрдирд╛ рд╣рд╛рде рднрд░реЗрдВред рдорд╛рдирдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд▓реМрдЯрддреЗ рд╕рдордп рдХрдмреНрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдВрдХ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ copy_const_reference рдпрд╛ copy_non_const_reference , рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рдпрдерди рд╕реНрддрд░ рдкрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд░реНрдЧ рд╕реНрдЯреНрд░реЙрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛, return_value_policy рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреБрдЫ :: рд░реАрд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ (.de) рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ:
  .def( "ResetID", static_cast< void (Some::*)() >( &Some::ResetID ) ) .def( "ResetID", static_cast< void (Some::*)(int) >( &Some::ResetID ), args( "some_id" ) ) 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╡рд┐рдзрд┐ рддрд░реНрдХ рдХрд┐рд╕ рдирд╛рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкрд╛рдпрдерди рдореЗрдВ рддрд░реНрдХ рдирд╛рдо C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд░рдг рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
  .def( "ChangeName", &Some::ChangeName, args( "name" ) ) .def( "SomeChanges", &Some::SomeChanges, args( "some_id", "name" ) ) 


рд╕реНрдереИрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ NOT_AN_IDENTIFIER рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ:
  .add_static_property( "NOT_AN_IDENTIFIER", make_getter( &Some::NOT_AN_IDENTIFIER ) ) 

рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдмреВрд╕реНрдЯ :: рдЕрдЬрдЧрд░ :: make_getter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡рд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 #include <boost/python.hpp> #include "some.h" using namespace boost::python; BOOST_PYTHON_MODULE( example ) { class_<Some>( "Some" ) .def( init<int,string>( args( "some_id", "name" ) ) ) .def( "ID", &Some::ID ) .def( "Name", &Some::Name, return_value_policy<copy_const_reference>() ) .def( "ResetID", static_cast< void (Some::*)() >( &Some::ResetID ) ) .def( "ResetID", static_cast< void (Some::*)(int) >( &Some::ResetID ), args( "some_id" ) ) .def( "ChangeName", &Some::ChangeName, args( "name" ) ) .def( "SomeChanges", &Some::SomeChanges, args( "some_id", "name" ) ) .add_static_property( "NOT_AN_IDENTIFIER", make_getter( &Some::NOT_AN_IDENTIFIER ) ) ; } 

рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдкрд╛рдпрдерди 3.x):
 from example import * s = Some() print( "s = Some(); ID: {ID}, Name: {Name}".format(ID=s.ID(),Name=s.Name()) ) s = Some(123,'asd') print( "s = Some(123,'asd'); ID: {ID}, Name: {Name}".format(ID=s.ID(),Name=s.Name()) ) s.ResetID(234); print("s.ResetID(234); ID:",s.ID()) s.ResetID(); print("s.ResetID(); ID:",s.ID()) s.ChangeName('qwe'); print("s.ChangeName('qwe'); Name:'%s'" % s.Name()) s.SomeChanges(345,'zxc') print( "s.SomeChanges(345,'zxc'); ID: {ID}, Name: {Name}".format(ID=s.ID(),Name=s.Name()) ) 

рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рджреЗрдЦреЗрдВрдЧреЗ:
 s = Some(); ID: -1, Name: '' s = Some(123,'asd'); ID: 123, Name: 'asd' s.ResetID(234); ID: 234 s.ResetID(); ID: -1 s.ChangeName('qwe'); Name:'qwe' s.SomeChanges(345,'zxc'); ID: 345, Name: 'zxc' 


рдХрдХреНрд╖рд╛ рдЖрд╡рд░рдг рдХреЛ рдкрд╛рдпрдерди рдХрд░реЗрдВ


рддреЛ, рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреБрд╢реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЬрдм рдХреБрдЫ (123, 'asd') рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдкрд╛рдпрдерди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ __repr__ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓реА рдереА, рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг, рдЙрд╕реА рдкреНрд░рд┐рдВрдЯ (рдХреБрдЫ (123, 'asd)) )) рдмрд╣реБрдд рдЕрдХрд▓реНрдкрдиреАрдп рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ __str__ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓реА рдереАред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ C ++ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдпрд╣ C ++ рдореЗрдВ рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрдкрддреНрддрд┐ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЬрдЧрд░ рдореЗрдВ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕реА ++ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреИрд╕реЗ рд╣реБрдХ рдХрд░рддреЗ рд╣реИрдВ?
рдмрд╣реБрдд рд╕рд░рд▓: рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкрд╛рдпрдерди рддрд░реАрдХреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо C ++ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рд╕реАрдзреЗ wra.cpp рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд░рдг рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 ... string Some_Str( Some const& ); string Some_Repr( Some const& ); ... BOOST_PYTHON_MODULE( example ) { class_<Some>( "Some" ) ... .def( "__str__", Some_Str ) .def( "__repr__", Some_Repr ) ... 

рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 string Some_Str( Some const& some ) { stringstream output; output << "{ ID: " << some.ID() << ", Name: '" << some.Name() << "' }"; return output.str(); } string Some_Repr( Some const& some ) { return "Some: " + Some_Str( some ); } 


рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдирд╛рдо рдХреЗ рдЧреБрдг рдФрд░ рднреА рд╕рд░рд▓ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрдЯ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ:
  .add_property( "some_id", &Some::ID, static_cast< void (Some::*)(int) >( &Some::ResetID ) ) .add_property( "name", make_function( static_cast< string const& (Some::*)() const >( &Some::Name ), return_value_policy<copy_const_reference>() ), &Some::ChangeName ) 


рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп, рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рдереЗ:
1. some_id рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕реЗрдЯ-рдореЗрдердб рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯ рдерд╛, рдЬреЛ рдЗрдВрдЯ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрддрд╛ рд╣реИ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдУрд╡рд░рд▓реЛрдбред
2. рдирд╛рдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдЧреЗрдЯ-рдореЗрдердб рдХреЗ рд▓рд┐рдП, рдмрдврд╝рд╛рд╡рд╛ :: python :: make_function рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ_рд╡рд╛рд▓реНрдпреБ_рдкреЛрд▓рд┐рд╢ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ред

рд╣рдо рдкреНрд░рд┐рдВрдЯ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ (рдХреБрдЫ (123, 'asd')) рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдпрд╛рдд рдХреЗ рдмрд╛рдж рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХреБрдЫ (123, 'asd') * рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдкрд╛рдЗрдерди рддрд╛рдирд╛рд╢рд╛рд╣ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: {ID: 123, рдирд╛рдо: 'asd' }
рдорд╛рдирдХ рддрд╛рдирд╛рд╢рд╛рд╣реА рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреБрдЫ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдХрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛?
рдЖрдЗрдП рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рдЗрдереЛрдирд┐рдХ рдХрд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ as_dict рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 ... dict Some_ToDict( Some const& ); void Some_FromDict( Some&, dict const& ); ... BOOST_PYTHON_MODULE( example ) { class_<Some>( "Some" ) ... .add_property( "as_dict", Some_ToDict, Some_FromDict ) ; ... } ... dict Some_ToDict( Some const& some ) { dict res; res["ID"] = some.ID(); res["Name"] = some.Name(); return res; } void Some_FromDict( Some& some, dict const& src ) { src.has_key( "ID" ) ? some.ResetID( extract<int>( src["ID"] ) ) : some.ResetID(); some.ChangeName( src.has_key( "Name" ) ? extract<string>( src["Name"] ) : string() ); } 

рдмрдврд╝рд╛рд╡рд╛ :: рдЕрдЬрдЧрд░ :: рддрд╛рдирд╛рд╢рд╛рд╣ рд╡рд░реНрдЧ C ++ рд╕реНрддрд░ рдорд╛рдирдХ рдкрд╛рдпрдерди рддрд╛рдирд╛рд╢рд╛рд╣реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Str, list, tuple рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рддрджрдиреБрд╕рд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдХреНрд╖рд╛рдПрдВ рд╕реА ++ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрддреЗ рд╣реИрдВ :: рдЕрдЬрдЧрд░ :: рд╡рд╕реНрддреБ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдкрдХреЛ рдЕрднреА рднреА рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :: рдЕрдЬрдЧрд░ :: рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред

рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдбрд┐рдлреЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдбрд┐рдлреЙрд▓реНрдЯ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рдФрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрдХреНрд╖рд╛ рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИред
Boost.Python рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрд╡рд░рдг рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Python рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд▓рдкреЗрдЯреЗрдВ рдЬреЛ рдЗрддрдиреА рдЦрддрд░рдирд╛рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ, рдПрдирдо рдХреЛ рд▓рдкреЗрдЯреЗрдВ, рдФрд░ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд┐рдЯрд░реНрди_рд╡рд▓реНрдпреВ_рдкреЛрд▓рд┐рд╢ <рд╕рдВрджрд░реНрдн_existing_obidject> рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред
рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реИрдкрд░ рдХреЗ рдмрд┐рдирд╛ рд╕реАрдзреЗ рдорд╛рдирдХ рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ C ++ рд╕реЗ рдЕрдЬрдЧрд░ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдХреИрд╕реЗ рдлреЗрдВрдХрдирд╛ рд╣реИред
рд╡рд┐рд╖рдп рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ


рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдорд╕реМрджрд╛ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
MSVS v11 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Python 3.3 x64 рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрдХрд▓рд┐рдд .dll Boost.Python рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрд▓рдЧреНрди рд╣реИрдВред
рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдХреБрдЫ.h, some.cpp, wra.cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд┐рд▓реНрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд╛рдпрдерди рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


Boost.Python рдкреНрд░рд▓реЗрдЦрди
Boost.Python рдореЗрдВ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдиреАрддрд┐рдпрд╛рдВ
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдмреВрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛
* рдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдмреВрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛
Boost.Python рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛

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


All Articles