рдПрдХ рдФрд░ C ++ рдкреНрд▓рдЧрдЗрди рдлреНрд░реЗрдорд╡рд░реНрдХ

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрд┐рд╕рдиреЗ рджреМрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛: рдЗрд╕ рд╢рд╛рдВрдд рдкрд░рд┐рд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЗрди рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдХрд┐рд╕реА рджрд┐рди рдореИрдВ рдХреБрдЫ рд╕рд╛рд░реНрдердХ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦреВрдВрдЧрд╛ рддрд╛рдХрд┐ рджреВрд╕рд░реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ! тАЭ


рд╕рднреА рдХреЛ рд╣рд╛рдБ! рдпрд╛ рдирд╣реАрдВ? редред


C ++ 17 рдорд╛рдирдХ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реА рдХреЛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЙрди рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ WG21 рд╕реЗ рд▓реЛрдЧ рд╣рдореЗрдВ рдЦрд░рд╛рдм рдХрд░рддреЗ рд╣реИрдВред
? : #, )) ...


рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╡рд┐рд╖рдп рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдореВрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ (рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░) рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ <-> рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреНрд░рдмрдВрдзрдХ <>> рдкреНрд▓рдЧрдЗрдиреНрд╕ ред


рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕реА рдХрдВрдкрдиреА рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрдиреБрднрд╡ (рдЕрд╕рдлрд▓) рд╣реИ рдЬреЛ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рд╣реИ, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдХрдИ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдХреЛ рдЧреНрд░реЗ рдмрдирд╛рддреА рд╣реИрдВ ...


рд╕реНрд╡-рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдХреБрдЫ рдХреНрд╖рдгреЛрдВ рдФрд░ C ++ 17 рдкрд░ рд▓реЗрдЦреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред


рдореИрдВрдиреЗ рдХрд┐рддрдирд╛ рдмреБрд░рд╛ рдпрд╛ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ - рдЬрдЬ рд╕рд╛рд╣рдм, рдкреНрдпрд╛рд░реЗ рдЦрдмреНрд░реЛрд╡рд┐рддреНрд╕ ...


рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди


рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ


  • рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд░реЗрдбреЛрдВ рдореЗрдВ рдЪрд▓рд╛рдПрдВ)
  • рдЕрдкреНрд░рдпреБрдХреНрдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдирд▓реЛрдб рдХрд░реЗрдВ

рдЖрдХрд░реНрд╖рдг рдЖрддреЗ рд╣реИрдВ


  • рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА
  • рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди
  • рд╣реИрдбрд░-рдХреЗрд╡рд▓ рдбрд┐рдЬрд╝рд╛рдЗрди

рд╡рд┐рдкрдХреНрд╖


  • рдпрджрд┐ рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЙрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рдмрдВрдзрдХ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╕рд╛рде рд╣реА рд╕рд╛рде libstdc ++) ABI рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП
  • рдПрд╕рдЯреАрдбреА рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдХреИрд╢ :: рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?
  • рд╡рд╛рдпрджрд╛ рдХреА рд╡реИрдзрддрд╛?

рдкреНрд▓рдЧрд┐рди рдирд┐рд░реНрдорд╛рдг


 class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) { //     subscribe<2>("sum2", [](std::any a, std::any b)-> std::any { return std::any_cast<int>(a) + std::any_cast<int>(b); }, "  " ); } }; 

рдкреНрд▓рдЧрдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


 std::shared_ptr<micro::plugins> manager = micro::plugins::get(); std::shared_ptr<micro::iplugin> myplugin = manager->get_plugin("myplugin"); if (myplugin && myplugin->has<2>("sum2")) { std::shared_future<std::any> result = myplugin->run<2>("sum2", 25, 25); result.wait(); std::cout << std::any_cast<int>(result.get()) << std::endl; } 

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ ред


рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдореБрдЭреЗ C ++ рдкрд░ рд╣рд╛рдмрд░рд╛ рдкрд░ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ (рдФрд░ рдХреЗрд╡рд▓ C ++ рдкрд░ рдирд╣реАрдВ),
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рд░реЛрдЪрдХ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд▓рдЧреЗрдЧрд╛ред


рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдЖрдк рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ C ++ рдХреЗ рд╢рдмреНрджреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╢рдмреНрдж рдХрд╣рддреЗ рд╣реИрдВ, рд╕реНрд░реЛрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдирд╣реАрдВ рд╣реИрдВ - рд▓рдЧрднрдЧ 1000 рд▓рд╛рдЗрдиреЗрдВред


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


microplugins

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


All Articles