рдмреВрд╕реНрдЯ рд╕рд┐рдЧреНрдирд▓ - рд╕реА ++ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ

рдЫрд╡рд┐

рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ


рдЖрдЬ рдореИрдВ рдмреВрд╕реНрдЯ рд╕рд┐рдЧреНрдирд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - рд╕рд┐рдЧреНрдирд▓, рд╕реНрд▓реЙрдЯ, рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

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



рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ


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

рдПрдХ рд╕рдВрдХреЗрдд рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
#include "boost/signals.hpp" class Button { public: boost::signal<void()> OnPressed; // }; 


рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕рдВрдХреЗрдд рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдПрдХ рд╕реНрд▓реЙрдЯ рдХреЛ рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕реНрд▓реЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ:

 void FunctionSlot() { std::cout<<"FunctionSlot called"<<std::endl; } ... Button mainButton; mainButton.OnPressed.connect(&FunctionSlot); //  


рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 struct FunctionObjectSlot { void operator()() { std::cout<<"FunctionObjectSlot called"<<std::endl; } }; ... //   mainButton.OnPressed.connect(FunctionObjectSlot()); 

рдХрднреА-рдХрднреА, рдпрджрд┐ рдмрд╣реБрдд рдХрдо рдХреЛрдб рд╣реИ, рддреЛ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:
 //   mainButton.OnPressed.connect([]() { std::cout<<"Anonymous function is called"<<std::endl; }); 


рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдХрд░ рднреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :: рдмрд╛рдЗрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕:
 #include "boost/bind.hpp" class MethodSlotClass { public: void MethodSlot() { std::cout<<"MethodSlot is called"<<std::endl; } }; ... MethodSlotClass methodSlotObject; //  mainButton.OnPressed.connect(boost::bind(&MethodSlotClass::MethodSlot, &methodSlotObject)); 


рдмреВрд╕реНрдЯ рдмрд┐рдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреЛрдбрд╝рд╛ред рд╕рд┐рдЧреНрдирд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд▓рд┐рдП рдмреНрд░реИрдХреЗрдЯ рдСрдкрд░реЗрдЯрд░ () рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
 mainButton.OnPressed(); 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╡реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
рдлрдВрдХреНрд╢рди рд╕реНрд▓реЙрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
FunctionObjectSlot рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
MethodSlot рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ


рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд


рд╕рд┐рдЧреНрдирд▓ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрд▓реЙрдЯ рдШреЛрд╖рдгрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
 boost::signal<void(int, int)> SelectCell; 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
 void OnPlayerSelectCell(int x, int y) { std::cout<<"Player selected cell: "<<x<<", "<<y<<std::endl; } //   : SelectCell.connect(&OnPlayerSelectCell); // : SelectCell.connect([](int x, int y) { std::cout<<"Player selected cell: "<<x<<", "<<y<<std::endl; }); //   : SelectCell(10, -10); 


рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдХреЗрдд


рд╕рд┐рдЧреНрдирд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ - рдпрджрд┐ рдХрдИ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рд╕рдВрдХреЗрдд, рдмрджрд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рд┐рдЧреНрдирд▓ рдЕрдВрддрд┐рдо рд╕реНрд▓реЙрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рдПрдЧреНрд░реАрдЧреЗрдЯрд░" рдХреЛ рд╕рдВрдХреЗрдд рдореЗрдВ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд▓реМрдЯреА рд╣реБрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛ рджреЗрдЧрд╛ред

рдмреЗрд╢рдХ, рдореБрдЭреЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рд╕рдВрдХреЗрдд рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред рдорд╛рди рд▓реАрдЬрд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рдЧреНрдирд▓ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдЪрд┐рдкрдХреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреЛ рдмрд╕ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдСрдкрд░реЗрдЯрд░ "рдХреЛрд╖реНрдардХ" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ:

 struct Sum { template<typename InputIterator> std::string operator()(InputIterator first, InputIterator last) const { //  -   : if (first == last) { return std::string(); } // -   : std::string sum; while (first != last) { sum += *first; ++first; } return sum; } }; //  : auto f1 = []() -> std::string { return "Hello "; }; auto f2 = []() -> std::string { return "World!"; }; boost::signal<std::string(), Sum> signal; signal.connect(f1); signal.connect(f2); std::cout<<signal()<<std::endl; // "Hello World!" 


рдореНрдпреВрдЯ рд╕рд┐рдЧреНрдирд▓


рд╕реНрд▓реЙрдЯ рд╕реЗ рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ_рдЕрд▓_рд▓реЙрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдЕрд▓рдЧ рд╕реНрд▓реЙрдЯ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд▓реЙрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдврд╝рд╛рд╡рд╛ :: рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг:
 //   mainButton.OnPressed.disconnect_all_slots(); //    FunctionSlot boost::signals::connection con = mainButton.OnPressed.connect(&FunctionSlot); //  if (con.connected()) { //FunctionSlot   . mainButton.OnPressed(); // "FunctionSlot called" } con.disconnect(); //   mainButton.OnPressed(); //   


рд╕рд┐рдЧреНрдирд▓ рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрдм рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд▓реЙрдЯреНрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдХреЙрд▓ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 mainButton.OnPressed.connect(1, &FunctionSlot); mainButton.OnPressed.connect(0, FunctionObjectSlot()); mainButton.OnPressed(); //  "FunctionObjectSlot called",   "FunctionSlot called" 


рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╣рд▓реЗ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рджреВрд╕рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдиреЗ рдкрд░рд┐рдкрддреНрд░ рд▓рд┐рдВрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ рдФрд░ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ред рдЕрдм рдореИрдВ рдЙрди рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдкрддрд▓реЗ "рдкреБрд▓реЛрдВ" рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рдХреЛрдб рдХреЗ рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!

рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА:


www.boost.org/doc/libs/1_53_0/doc/html/signals.html

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


All Articles