рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдПрдбреНрд╕


POCO рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ ) рдкрд░ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ POCO рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕реНрдиреИрдк-рдЗрди рдФрд░ рдЙрд╕рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдЬреИрд╕реЗ рдХрд┐ ServerApplication рдФрд░ ConsoleApplication рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдиреИрдк-рдЗрди рдХреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдиреИрдк-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛рдПрдВ рдФрд░ UNIX рдбреЗрдореЙрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╡рд┐рд╡рд░рдг


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡реНрд╕ рдХреЛ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдХрдВрд╕реЛрд▓ рдФрд░ рд╕рд░реНрд╡рд░ ред
рдЙрдкрдХрд░рдг рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдЕрднреНрдпрд╛рд╕


рдЗрд╕ рд╕реНрдиреИрдк-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреЛрдХреЛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП :: Util :: рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░реЗрдВ:

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓реЙрдиреНрдЪ рд╡рд┐рдХрд▓реНрдк

POCO рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:

рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред POCO рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВ: IntValidator - рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, RegExpValidator - рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ рдФрд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдПрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ (рдХреЙрд▓рдмреИрдХ) "рд╣реИрдВрдЧ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 class myApp : public Application { public: myApp(int argc, char** argv) : Application(argc,argv) {} void initialize(Application& self) { cout << "" << endl; loadConfiguration(); //    Application::initialize(self); } void reinitialize() { cout << "" << endl; Application::uninitialize(); } void uninitialize(Application& self) { cout << "" << endl; Application::reinitialize(self); } void HelpHim(const std::string& name, const std::string& value) { cout << "  -   " << endl; } void Configure(const std::string& name, const std::string& value) { cout << "     " << endl; } void defineOptions(OptionSet& options) { cout << " " << endl; Application::defineOptions(options); options.addOption( Option("help", "h", " . ") .required(false) //  .repeatable(false) //  //myApp::handleOption - -  .callback(OptionCallback<myApp>(this, &myApp::handleOption))); options.addOption( Option("config-file", "f", "   ") .required(false) .repeatable(true) .argument("file") .callback(OptionCallback<myApp>(this, &myApp::Configure))); options.addOption( Option("bind", "b", "  =") .required(false) //  -   .argument("value") // ,  ,       [0; 100] .validator(new IntValidator(0, 100)) .binding("test.property")); //     } int main(const std::vector<std::string>& args) { cout << " -" << endl; } }; //  POCO_APP_MAIN   -  : // int wmain(int argc, wchar_t** argv) // { // myApp A(argc,argv); // return A.run(); // } POCO_APP_MAIN(myApp) 


UNIX рдбреЗрдореЙрди рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгред

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

рд╣рдо рдХреБрдЫ рдХрд╛рд░реНрдп рдХреЗ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ рд╕реЗрдХрдВрдб рдпрд╣ рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦреЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдХрд┐рддрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ:
 class myServerTask: public Task { public: myServerTask(): Task("MyTask") //    "MyTask" { } //  void runTask() { Application& app = Application::instance(); while (!isCancelled()) { //  sleep(1000); //    Application::instance().logger().information ("  " + DateTimeFormatter::format(app.uptime())); } } }; 

рдЕрдЧрд▓рд╛, рд╣рдо рд╕реАрдзреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
 class myServer: public ServerApplication { protected: void initialize(Application& self) { //  loadConfiguration(); // ServerApplication ServerApplication::initialize(self); //       logger().setChannel(AutoPtr<FileChannel>(new FileChannel("C:\\log.log"))); //    logger().information(""); } void uninitialize() { logger().information(""); // ServerApplication ServerApplication::uninitialize(); } int main(const std::vector<std::string>& args) { if (!config().getBool("application.runAsDaemon") && !config().getBool("application.runAsService")) { //     //       cout << "   ,      " << endl; } else { //        //  //   TaskManager tm; //     tm.start(new myServerTask); //     waitForTerminationRequest(); //     tm.cancelAll(); tm.joinAll(); } // return Application::EXIT_OK; } }; //  POCO_SERVER_MAIN(myServer) 


рд╕рдм рдХреБрдЫ, рд╕реЗрд╡рд╛ рдФрд░ рдбреЗрдорди рд▓рд┐рдЦрд╛ рд╣реИред
рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:


рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 void loadConfiguration(const std::string& path, int priority = PRIO_DEFAULT); 

рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред POCO рдореЗрдВ, рдПрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдПрдХ рдкреЗрдбрд╝ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП XML:
 <?xml version="1.0" encoding="UTF-8"?> <recipe name="" preptime="5" cooktime="180"> <title> </title> <composition> <ingredient amount="3" unit=""></ingredient> <ingredient amount="0.25" unit=""></ingredient> <ingredient amount="1.5" unit=""> </ingredient> <ingredient amount="1" unit=" "></ingredient> </composition> <instructions> <step>     .</step> <step>         .</step> <!-- <step>  .</step> -   ... --> <step>  ,       .</step> </instructions> </recipe> 

рд╣рдо рдЗрд╕ рддрд░рд╣ рдЬрд╣рд╛рдЬ:
 void initialize(Application& self) { ofstream file("out.txt"); cout << "" << endl; loadConfiguration("a:\\conf.xml"); file << " : " << config().getString("title") << endl << "   : " << config().getString("composition.ingredient[0]") << " : " << config().getString("composition.ingredient[0][@amount]") << " " << config().getString("composition.ingredient[0][@unit]") << endl << config().getString("composition.ingredient[1]") << " : " << config().getString("composition.ingredient[1][@amount]") << " " << config().getString("composition.ingredient[1][@unit]") << endl << config().getString("composition.ingredient[2]") << " : " << config().getString("composition.ingredient[2][@amount]") << " " << config().getString("composition.ingredient[2][@unit]") << endl << config().getString("composition.ingredient[3]") << " : " << config().getString("composition.ingredient[3][@amount]") << " " << config().getString("composition.ingredient[3][@unit]") << endl << " : " << endl << config().getString("instructions.step[0]") << endl << config().getString("instructions.step[1]") << endl << config().getString("instructions.step[2]") << endl; int timeToCook = config().getInt("[@cooktime]"); file << "  : " << timeToCook << endl; file.close(); } 

рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ:
рд╣рдо рдкрдХрд╛рддреЗ рд╣реИрдВ: рд╕рд╛рдзрд╛рд░рдг рд░реЛрдЯреА
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП: рдЖрдЯрд╛: 3 рдХрдк
рдЦрдореАрд░: 0.25 рдЧреНрд░рд╛рдо
рдЧрд░реНрдо рдкрд╛рдиреА: 1.5 рдХрдк
рдирдордХ: 1 рдЪрдореНрдордЪ
рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:
рд╕рднреА рдЕрд╡рдпрд╡реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧреВрдВрдзреЗрдВред
рдПрдХ рдХрдкрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЧрд░реНрдо рдХрдорд░реЗ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред
рдлрд┐рд░ рд╕реЗ рдЧреВрдВрдз, рдПрдХ рдмреЗрдХрд┐рдВрдЧ рд╢реАрдЯ рдФрд░ рдУрд╡рди рдореЗрдВ рд░рдЦреЗрдВред
рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХрд╛ рд╕рдордп: 180

рдЗрд╕реА рддрд░рд╣, рдЖрдк рдкрд╛рд░реНрд╕ рдФрд░ INI рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрд╢рд╛ "рд╢реНрд░реЗрдгреА.рдХреА" рдлрд╝реЙрд░реНрдо рдХреА рдкрд╣рдЪрд╛рди рд╣реЛрдЧреАред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
 ;INI-File [Group] ValueText = "hello world" IntValue = 123 

рд╣рдо рдЗрд╕ рддрд░рд╣ рдЬрд╣рд╛рдЬ:
 std::string text = config().getString("Group.ValueText"); // text == "Hello world" int value = config().getInt("Group.IntValue"); // value == 123 

.Property рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪрд░ рдХрд╛ рдирд╛рдо рд╣реА рд╣реЛрддрд╛ рд╣реИ
; рдЬрд╛рд╡рд╛ рд╕рдВрдкрддреНрддрд┐ рдлрд╝рд╛рдЗрд▓
Value.Text = "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб"
Int.Value = 123

рд╣рдо рдЗрд╕ рддрд░рд╣ рдЬрд╣рд╛рдЬ:
 std::string text = config().getString("Value.Text"); // text == "Hello world" int value = config().getInt("Int.Value"); // value == 123 


рд▓реЙрдЧрд┐рдВрдЧ рдЯреВрд▓

рд▓реЙрдЧрд┐рдВрдЧ рдЯреВрд▓ рдореЗрдВ рдЪрд╛рд░ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:

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

рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдирд┐рдореНрди рд╕реЗ рдЙрдЪреНрдЪ рдореЗрдВ):

рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рднреА рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЪреИрдирд▓ - рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рд▓рд┐рдВрдХред
рдХрдИ рдореВрд▓ рдЪреИрдирд▓ рд╣реИрдВ:


рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 //  AutoPtr<ConsoleChannel> console(new ConsoleChannel); //  AutoPtr<PatternFormatter> formater(new PatternFormatter); formater->setProperty("pattern", "%Y-%m-%d %H:%M:%S %s: %t"); //  AutoPtr<FormattingChannel> formatingChannel(new FormattingChannel(formater, console)); //  Logger::root().setChannel(formatingChannel); //   Logger::get("Console").information("  "); //      AutoPtr<FormattingChannel> file(new FormattingChannel(formater, AutoPtr<FileChannel>(new FileChannel("A:\\123.txt")))); //  Logger::create("File", file); //  Logger::get("File").fatal("I want to play a game.    "); //   AutoPtr<SplitterChannel> splitter(new SplitterChannel); //       splitter->addChannel(file); splitter->addChannel(console); //    Logger::create("AllChannel", file); //    Logger::get("AllChannel").fatal("    "); //    AutoPtr<EventLogChannel> event(new EventLogChannel); //  Logger::create("Event", event); //     (  Windows) Logger::get("Event").fatal("   "); 


рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдирд╛

рдкреАрдУрд╕реАрдУ рдореЗрдВ, рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣рд░ рдХреАрдордд рдкрд░ рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрдкрдХрд░рдг, рдХреНрд▓рд╛рд╕рдУрд▓реЗрдбрд░ рдХреЗ рд╕рд╛рде рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╣рдо рдПрдХ рд╕рд░рдгреА рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд┐рдзрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо () рдХреЙрдиреНрд╕реНрдЯ = 0 рднреА рдмрдирд╛рдирд╛ рд╣реИ ; рдФрд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
 // sort.h class ABaseSort { protected: vector<int> array; //   public: ABaseSort () {} // - virtual ~ABaseSort() {} // virtual string name() const = 0; //  name ,    //    virtual void sort() = 0; //  - void loadVector(vector<int>& lArray) { array.assign(lArray.begin(), lArray.end()); } vector<int> getArray() { return array; } //Xor-swap static void swap(int &A, int &B) { A ^= B ^= A ^= B; } }; 

рдЕрдЧрд▓рд╛, рд╣рдо 2 рдЫрдБрдЯрд╛рдИ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ: рдмреБрд▓рдмреБрд▓рд╛ рд╡рд┐рдзрд┐ рдФрд░ рдорд╛рдирдХ STL рд╡рд┐рдзрд┐ (static_sort)
 //    // sort.cpp #include "sort.h" class bubbleSort : public ABaseSort { public: //   string name() const { return "Bubble Sort"; } //     void sort() { size_t size = array.size(); for (int i=0; i<size-1; ++i) for (int j=i; j<size; ++j) if (array[i] > array[j]) swap(array[i],array[j]); } }; //   STL (std::stable_sort) class stableSort : public ABaseSort { public: //   string name() const { return "Stable Sort"; } //     void sort() { stable_sort(array.begin(), array.end()); } }; 

рдпрд╣ рдирд┐рд░реНрдпрд╛рдд рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ
 POCO_BEGIN_MANIFEST(ABaseSort) //   POCO_EXPORT_CLASS(bubbleSort) //     POCO_EXPORT_CLASS(stableSort) //    stable_sort POCO_END_MANIFEST 

рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
 // logic.cpp #include "sort.h" //     ABaseSort Poco::ClassLoader<ABaseSort> loader; loader.loadLibrary("myImportedFile.dll"); //   if (loader.isLibraryLoaded("myImportedFile.dll")) { //    cout << "   : " << endl; for (auto it = loader.begin(); it != loader.end(); ++it) { cout << "  '" << it->first << "': " << endl; for (auto jt = it->second->begin(); jt != it->second->end(); ++jt) { cout << jt->name() << endl; } } //  int arr[13] = {32,41,23,20,52,67,52,34,2,5,23,52,3}; vector<int> A (arr,arr+13); //   if (ABaseSort *sort = loader.create("bubbleSort")) { //    sort->loadVector(A); // sort->sort(); //  auto vect = sort->getArray(); // for (auto it = vect.begin(); it != vect.end(); ++it) cout << *it << " "; cout << endl; //    loader.classFor("bubbleSort").autoDelete(sort); } //     stableSort if (ABaseSort *sort = loader.create("stableSort")) { sort->loadVector(A); sort->sort(); auto vect = sort->getArray(); for (auto it = vect.begin(); it != vect.end(); ++it) cout << *it << " "; cout << endl; loader.classFor("stableSort").autoDelete(sort); } } 

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

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


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

рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрдереЛрдЪрд┐рдд рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

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


All Articles