C ++ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕

рд╕рдореБрджрд╛рдп рдХреЛ рдмрдзрд╛рдИ!

рдореБрдЭреЗ C ++ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛, рдЬреЛ рдлрдВрдХреНрд╢рдиреНрд╕ рдХреЗ рдЕрдВрджрд░ рдлрдВрдХреНрд╢рдиреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

#include <iostream> int main() { inline_function(std::string s) { std::cout << "Hello, " << s << "!\n"; } with_name(make_hello); make_hello("Vasiliy Pupkin!"); return 0; } 


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рдПрдХ рдиреЗрд╕реНрдЯреЗрдб "рд╡рд┐рдзрд┐" рдирд╛рдо make_hello рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреИрд░рд╛рдореАрдЯрд░ "рд╡рд╛рд╕рд┐рд▓реА рдкреБрдкрдХрд┐рди" рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, Hello, Vasiliy Pupkin! ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдирд╛рдо рдХреЛ рдКрдкрд░ рдирд╣реАрдВ рдЦреАрдВрдЪ рд╕рдХрд╛ред



рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдЙрд╕реА рдХреЗ рдЙрджрд╛рд╣рд░рдг



C ++ рдореЗрдВ, рдЕрднреА рднреА рдХреЛрдИ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдкреВрдЫрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ?

рджреЛ рдЙрддреНрддрд░ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ "рд╢реВрдиреНрдп рдореЗрдВ" рдмрдирд╛рдП рдмрд┐рдирд╛ рдХрдХреНрд╖рд╛ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛:

 #include <stdio.h> int main() { //        class inline_function { public: //          inline_function() { printf("Hello, hell!\n"); } }; //      inline_function(); return 0; } 


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг "рдмрдЯ" рд╣реИрдВ рдЬреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:

1. рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рдореИрдВ рдХрдИ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдКрдВ? рдРрд╕реА рдЪреАрдЬрд╝ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рддрдереНрдп рдкрд░ рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрдд рдХреЛ рд╕рд╣рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдкрд░ рдирд╣реАрдВред

2. рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд╛рд▓рд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдмреЗрдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирд▓рд╛рдЗрди_рдлрдВрдХреНрд╢рди () рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдХрд╛ рддрд░реНрдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╡реИрд╕реЗ рднреА, рдХреЛрдИ рднреА рдЗрд╕ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдирд╛рдПрдВ?) рд▓реЗрдХрд┐рди рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрднреА рднреА "рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг" рдирд╛рдордХ рдПрдХ рдЪреАрдЬ рд╣реИ - рдФрд░ рд╣рдо рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реНрдорд╛рд░реНрдЯрд▓реА рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ () рдХреЛ "рдлрд╝рдиреНрдХреНрдЯрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ):

 #include <stdio.h> int main() { //        class inline_function_class { public: void operator()() { printf("Hello, world!\n"); } }; //       --   ! inline_function_class inline_function; //    inline_function(); return 0; } 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдареАрдХ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡рд░реНрдЧ рдХреЛ рдЧреБрдордирд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдкрдХреЛ inline_function_class рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо inline_function_class рдЖрд╡рд╢реНрдпрдХрддрд╛ рди inline_function_class

 #include <stdio.h> int main() { //        class { public: void operator()() { printf("Hello, world!\n"); } } inline_function; //       //    inline_function(); return 0; } 


рд░рд╛рдЗрдЯрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝


рддреЛ, рд▓рдХреНрд╖реНрдп - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ - рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд░реАрдХреЗ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рджреГрд╢реНрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦрд░рд╛рдм рди рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рдорд╛рдЗрдирд╕ рд╣реИ: рджрд┐рдП рдЧрдП рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ - рдореЗрд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдХреНрд╖рд░ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ:

 #include <stdio.h> int main() { //        /**   --   ,   ,     : **/ class { public: void operator()(/*       */) { /**  -- ,  ,     **/ printf("Hello, world!\n"); /**   --    **/ } } inline_function; //       /** =============================== **/ //    inline_function(); return 0; } 


рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рджреЛ рдореИрдХреНрд░реЛрдВ рдореЗрдВ рд╕рдореЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдирд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
 #define inline_function(params) \ class \ { \ public: void operator() (params)\ {\ #define with_name(value) \ }\ } value; #define with_params(...) __VA_ARGS__ //  -  ?  . 


рдЗрди рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, "рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди" рдХреЗ рдХреЛрдб рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реА рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ):
 int main() { inline_function(char * name) { printf("Hello, %s!\n",name); } with_name(hello) hello("Pupkin"); } 


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЗрдирд▓рд╛рдЗрди_рдлрдВрдХреНрд╢рди рдореИрдХреНрд░реЛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдмрд╛рд╕реНрдЯрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ __VA_ARGS__ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ)ред

рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп, рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рджрд┐рдЦреЗрдЧрд╛:
 int main() { inline_function (with_params(int a, int b)) { printf("%d+%d=%d\n",a,b,a+b); } with_name(plus); plus(2,2); } 


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрди рдореИрдХреНрд░реЛ рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ "рдлреЗрдВрдХ рджрд┐рдпрд╛" рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

рдкреАрдПрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдиреЗрд╕реНрдЯреЗрдб рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рддрдХрдиреАрдХ рджреБрдирд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрд░рд╛рдиреА рд╣реИ, рдФрд░ рдореИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдЦреЛрдЬ рдкрд╛рдпрд╛ред рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд▓реЗрдЦ рдПрдХ рд╢реИрдХреНрд╖рд┐рдХ рдЕрд░реНрде рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕реМрдВрджрд░реНрдп рдкреВрд░реНрдгрддрд╛ рд╣реИред

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


All Articles