рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ , рд╣рдордиреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рдЕрдиреНрдп рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЖрд▓реЗрдЦ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рднреА рд╕реНрдкрд░реНрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреИрд╕реЗ "рдХрд╛рд░реНрдпрд╢реАрд▓" рдирд╛рдорд╕реНрдерд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддрдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛрдб рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдХрдИ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рд╕рднреА рдХреЛ "рдорд╛рдирдХ" рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдЖрд╡реЗрджрди рдРрд╕реА рджреБрд░реНрд▓рдн рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИред
1)
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВ ред
рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдо рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдорд╕реНрдерд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ "рджрд╕реНрддрд╛рд╡реЗрдЬ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
#include <boost/array.hpp> #include <boost/scoped_ptr.hpp>
2)
"рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдЕрдзрд┐рдорд╛рдирддрдГ рд╡рд┐рднрд┐рдиреНрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд░рдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП ред
"рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдЖрд╡реЗрджрди рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ
рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред
3)
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓реА рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдЕрдХреНрд╕рд░ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ ред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рдЖрд╕рд╛рдиреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
4)
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ
#include рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдЖрдк рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреАред рд╕рдЯрд░ рдФрд░ рдПред рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ (рдирд┐рдпрдо 23) рдХреА рдкреБрд╕реНрддрдХ "C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реНрдЯреИрдВрдбрд░реНрдб" рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╡рд┐рд╡рд░рдг
рдЗрд╕рдХреЗ рдмрд╛рдж, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ
SomeLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ
A_1 ,
A_2 рдФрд░
A_3 рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рд╣рд░рд╛ рдХреНрд╖реЗрддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рд▓рд╛рд▓ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреАрд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
SomeLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ
STL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рджреЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдХрдХреНрд╖рд╛рдПрдВ
I_1 рдФрд░
I_2 рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП "рдЕрджреГрд╢реНрдп" рд╣реИрдВ, рдЬреЛ рдЖрдХреГрддрд┐ рдореЗрдВ рдирд╛рд░рдВрдЧреА рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рддреАрд░ рджреВрд╕рд░реЛрдВ рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕
A_1 , рдХрдХреНрд╖рд╛рдУрдВ рдХреА
рд╕реВрдЪреА ,
рд╡реЗрдХреНрдЯрд░ рдФрд░
I_1 рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрдЧ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛, рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдпрд╛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ
config.hpp рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ "рдХрдВрдЯреНрд░реЛрд▓" рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред
рддреЛ рдпрд╣рд╛рдБ рд╣рдо рдЪрд▓рддреЗ рд╣реИрдВ ...
рдкреНрд░рд╕реНрддреБрдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЗ рдирд╛рдорд╕реНрдерд╛рди
some_lib рдореЗрдВ рдпреВрдЬрд░ рдХреНрд▓рд╛рд╕реЗрд╕ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдиреЗрдорд╕реНрдкреЗрд╕ рдирд╛рдо рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреНрд▓рд╛рд╕реЗрд╕
рд▓рдЧрд╛ рджреЗрдВрдЧреЗ ред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА
some_lib рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреАред рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
рдП _ * рд╣реЛрдЧрд╛ред "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА
рдПрдЪрдкреАрдкреА рдлрд╛рдЗрд▓реЗрдВ ред рдлрд╝рд╛рдЗрд▓реЗрдВ
I _ *ред Hpp , рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ рдпреБрдХреНрдд, рдХреЛ
рдирд┐рд╣рд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдХреБрдЫ_рд▓рд┐рдм / рдЗрдореНрдкреИрдХреНрдЯ / config.hpp рдлрд╛рдЗрд▓ рдХрд░реЗрдВ
#ifndef SOME_LIB__IMPL__CONFIG_HPP #define SOME_LIB__IMPL__CONFIG_HPP #if defined(_MSC_VER)
рдХреБрдЫ_рд▓рд┐рдм / рдЗрдк / I_1.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
#ifndef SOME_LIB__IMPL__I_1_HPP #define SOME_LIB__IMPL__I_1_HPP #include <vector> #include <some_lib/impl/config.hpp> namespace some_lib { namespace impl { class I_1 { public: void func( std::vector<int> const& ); private: // - }; }} #endif
рдХреБрдЫ_рд▓рд┐рдм / рдЗрдк / I_2.hpp рдлрд╝рд╛рдЗрд▓
#ifndef SOME_LIB__IMPL__I_2_HPP #define SOME_LIB__IMPL__I_2_HPP #include <vector> #include <some_lib/impl/config.hpp> namespace some_lib { namespace impl { class I_2 { public: // private: std::vector<int> data_; }; }} #endif
рдХреБрдЫ_рд▓рд┐рдм / A_1.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
#ifndef SOME_LIB__A_1_HPP #define SOME_LIB__A_1_HPP #include <list> #include <vector> #include <some_lib/impl/config.hpp> #include <some_lib/impl/I_1.hpp> namespace some_lib { class A_1 { public: // private: impl::I_1 a_; std::list<int> data_; std::vector<int> another_data_; }; } #endif
рдХреБрдЫ_рд▓рд┐рдм / A_2.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
#ifndef SOME_LIB__A_2_HPP #define SOME_LIB__A_2_HPP #include <string> #include <some_lib/impl/config.hpp> #include <some_lib/impl/I_2.hpp> namespace some_lib { class A_2 { public: A_2( std::string const& ); private: impl::I_2 a_; }; } #endif
рдХреБрдЫ_рд▓рд┐рдм / A_3.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
#ifndef SOME_LIB__A_3_HPP #define SOME_LIB__A_3_HPP #include <string> #include <some_lib/impl/config.hpp> #include <some_lib/impl/I_2.hpp> #include <some_lib/A_2.hpp> namespace some_lib { class A_3 { public: A_3( std::string const& ); void func( A_2& ); private: impl::I_2 a_; std::string name_; }; } #endif
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
#include <some_lib/A_1.hpp> #include <some_lib/A_2.hpp> #include <some_lib/A_3.hpp>
рдЯреЗрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдЪрд╛рд░
рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
#ifndef ,
#define ,
#endif рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдирдХ "рдЕрднрд┐рднрд╛рд╡рдХреЛрдВ" рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ
рдПрдХ рдмрд╛рд░ #pragma рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рд╕рднреА рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рд╣реИред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЬрдм рдХреЗрд╡рд▓ рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓
some_lib / A_3.hpp рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, 4/6 рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ) рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдФрд░ рдЕрдЧрд░ рдЖрдк рдЕрдм рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
рдЙрддреНрддрд░ "рд╣рд╛рдВ" рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдореБрдЦреНрдп рддрд░реНрдХ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛ рдЬрдм рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрддреНрд╡реЛрдВ рдХреЗ рдкреВрд░реНрдг рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рддрддреНрд╡реЛрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ) рдХреЗ рдмреАрдЪ рд▓рдЧрднрдЧ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХрдИ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдЬрд╡рд╛рдм рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рд╕рдорд╛рд╡реЗрд╢ рдХреЗ "рд╕рдВрд░рдХреНрд╖рдХ" рдФрд░
#include рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдиреЙрдирдЬрд╝рд░реЛ рд╕рдордп рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ "рдирд╣реАрдВ" рд╣реИ рдпрд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдорд╕реНрддреА ...
рдПрдХрд▓ рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
#include <some_lib/include.hpp>
рдЕрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрд╖рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
1) рдЪреВрдВрдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рд╣реИ (
some_lib / рд╢рд╛рдорд┐рд▓.hpp рдлрд╝рд╛рдЗрд▓ ), рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рднреА "рдЧрд╛рд░реНрдб" рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдкреВрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрдиреЗрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
2) рдПрдХ "рдХрд╕реНрдЯрдо" рд╡рд░реНрдЧ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрддреНрд╡ рд╡рд░реНрдЧ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдм рдирд┐рд░реНрднрд░ рддрддреНрд╡реЛрдВ рд╕реЗ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓ рд╕рдорд╛рд╡реЗрд╢рди рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
3) "рдХрд╛рдо" рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рдХреБрдЫ рдлрд╝рд╛рдЗрд▓
рджрд░реНрдЬ рдХрд░реЗрдВ / рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ #ifndef SOME_LIB__INCLUDE_HPP #define SOME_LIB__INCLUDE_HPP #include <list> #include <vector> #include <string> #include <some_lib/private/config.hpp> namespace z_some_lib { using namespace std; // // using std::list; // using std::vector; // using std::string; #include <some_lib/private/I_1.hpp> #include <some_lib/private/I_2.hpp> #include <some_lib/public/A_1.hpp> #include <some_lib/public/A_2.hpp> #include <some_lib/public/A_3.hpp> } namespace some_lib { using z_some_lib::A_1; using z_some_lib::A_2; using z_some_lib::A_3; } #endif
рдлрд╝рд╛рдЗрд▓
рдХреБрдЫ_рд▓рд┐рдм / рдирд┐рдЬреА / config.hpp #if defined(_MSC_VER)
рдХреБрдЫ_рд▓рд┐рдм / рдирд┐рдЬреА / I_1.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
class I_1 { public: void func( vector<int> const& ); private:
рдХреБрдЫ_рд▓рд┐рдм / рдирд┐рдЬреА / I_2.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
class I_2 { public:
рдХреБрдЫ_рд▓рд┐рдм / рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / A_1.hpp рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ
class A_1 { public:
рдлрд╝рд╛рдЗрд▓
рдХреБрдЫ_рд▓рд┐рдм / рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / A_2.hpp class A_2 { public: A_2( string const& ); private: I_2 a_; };
рдлрд╝рд╛рдЗрд▓
рдХреБрдЫ_рд▓рд┐рдм / рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / A_3.hpp class A_3 { public: A_3( string const& ); void func( A_2& ); private: I_2 a_; string name_; };
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХреЛрдб рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдпрд╣ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд╡рд╣ рд╕рднреА рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХрд╛ рд╡рдЬрди рдХрд░рддреЗ рд╣реБрдП, рдЕрдкрдиреЗ рд▓рд┐рдП рдЪреБрдиреЗрдЧрд╛ред
рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░рд╕реНрддреБрдд рдпреЛрдЬрдирд╛ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рдХреА рднрд╛рд╡рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдирд╣реАрдВ рд╣реИ ...