{"id":278643,"date":"2016-04-20T03:10:21","date_gmt":"2016-04-19T23:10:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=278643"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=278643","title":{"rendered":"\u041a\u0430\u043f\u0435\u043b\u044c\u043a\u0430 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0434\u043b\u044f \u0421++. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f: \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/930\/b5a\/355\/930b5a3557014f3f9a0a707096c72bbc.bmp\"\/><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421++ \u043b\u0438\u0431\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u043b\u0438\u0431\u043e \u0441\u043b\u0430\u0431\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u0432\u043e\u044e \u043c\u0438\u043a\u0440\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0435\u0451 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">C\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0446\u0438\u043a\u043b\u0430<\/b><\/p>\n<div class=\"spoiler_text\">1. \u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443<br \/>  2. \u041f\u0440\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<br \/>  3. \u041f\u0440\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442  <\/div>\n<\/div>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041c\u043e\u044f \u0441\u043e\u0432\u0435\u0441\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u0442\u0430, \u0435\u0441\u043b\u0438 \u044f \u043d\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0445\u0438\u0442\u0440\u043e\u0439 \u043c\u044b\u0441\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0430 \u043c\u0435\u043d\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f, \u0441\u043a\u043e\u0440\u0435\u0435, \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0430, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0440\u044f\u0442\u043a\u0438 \u043f\u043e\u0434 \u043a\u0430\u0442. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e: \u0442\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>  <a name=\"marketing_intro\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0441 \u0441\u0430\u043c\u043e\u0440\u0430\u0437\u043e\u0431\u043b\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043e \u043f\u0438\u0430\u0440\u0435 \u0438 \u043d\u0430\u0431\u0438\u0442\u044b\u0445 \u0448\u0438\u0448\u043a\u0430\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\u0417\u0430\u0439\u0434\u0443 \u0438\u0437\u0434\u0430\u043b\u0435\u043a\u0430\u2026<\/p>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0439 \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb, \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u043b\u0441\u044f cpprt. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u044d\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439\u00bb (\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043a\u0430 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 data_mapping) \u0447\u0438\u0441\u0442\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0441\u044f\u0446. \u0418 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c. \u042f \u0445\u043e\u0442\u0435\u043b \u043d\u0430 \u043d\u0435\u0439 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>  \u041f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435? \u0417\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u044f \u0435\u0451 \u043b\u044e\u0434\u044f\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0443\u2026 \u0411\u0435\u0437\u0443\u043c\u0438\u0435. \u041f\u043b\u0430\u043d \u0431\u044b\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>  1. \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e \u0431\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<br \/>  2. \u041d\u0430\u0439\u0442\u0438 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0433\u043e\u0440\u044f\u0442\u0441\u044f \u0438\u0434\u0435\u0435\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0418\u0441\u043a\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0440\u0435\u0434\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 (\u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445), \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f\u0445, \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0438 \u0442.\u0434.<br \/>  3. \u041d\u0430\u0439\u0434\u044f \u0435\u0434\u0438\u043d\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432, \u0432\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043a\u0443\u0440\u0441 \u0434\u0435\u043b\u0430 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>  4. \u041a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438 \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430, \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 (\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443\u0442, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u2013 \u0441\u0432\u044f\u0442\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430!..) \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041f\u0440\u0438\u0431\u044b\u043b\u044c \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u0436 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445-\u043d\u0438\u0431\u0443\u0434\u044c \u0447\u0435\u0441\u0442\u043d\u044b\u0445, \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438.<br \/>  5. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u0439\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0430\u0436\u0438, \u043d\u0430 \u043f\u0440\u0430\u0432\u0430\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u044f \u043d\u0430\u0434\u0435\u044f\u043b\u0441\u044f \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043d\u0438\u0437\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043e\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u0438) \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u043b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0432\u043e\u0438\u043c\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u0435\u043b\u0430\u043c\u0438, \u0438\u043c\u0435\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430.<br \/>  6. \u041d\u0443 \u0438 \u0442\u0443\u0442, \u043a\u0430\u043a \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e\u2026 PROFIT!<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435, \u044f \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u0432\u0435\u0440\u0438\u043b \u0432 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430.<\/p>\n<p>  \u042f \u0432\u0435\u0440\u0438\u043b \u0432 \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u043d, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u043b \u043f\u044f\u0442\u044c \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0438\u0445 pet-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0437\u043d\u0430\u043b \u2013 \u0443 \u043b\u044e\u0434\u0435\u0439 \u0435\u0441\u0442\u044c \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u0445\u043e\u0442\u0435\u0442\u044c \u0436\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0432\u043e \u0432\u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438 \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u00ab\u0445\u043e\u0442\u0435\u043d\u0438\u0435 \u0436\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c\u00bb \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 (\u0433\u0434\u0435-\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445, \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u044b\u043c) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043a\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 \u043f\u043b\u044e\u0441\u0430\u0445\u00bb. \u042f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0437\u0430\u043c\u0430\u043d\u0438\u0442\u044c \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u0441\u0432\u043e\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0430 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0440\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u043f\u043e\u0441\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u042f \u0432\u0435\u0440\u0438\u043b \u0432 \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u043d \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u043b <a href=\"https:\/\/toster.ru\/q\/236510\">\u0432\u043e\u043f\u0440\u043e\u0441<\/a> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b <a href=\"http:\/\/www.apofig.com\/2015\/09\/pet-project.html\">\u043e\u0442\u0432\u0435\u0442 \u0432 \u0431\u043b\u043e\u0433\u0435<\/a> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <a href=\"https:\/\/toster.ru\/user\/apofig\">apofig<\/a> (\u043e\u043d \u0436\u0435 \u0421\u0430\u043d\u0401\u043a \u0411\u0430\u0433\u043b\u0430\u0439, \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0435\u043c\u0443). \u0421\u0443\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c, \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0430\u0447\u043d\u0451\u0442 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f, \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u2013 \u043f\u0440\u0438\u0447\u0451\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e\u0434\u0447\u0430\u0441 \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0442\u043e\u0440\u0436\u043d\u0430\u044f \u0438 \u043d\u0435\u0440\u0432\u043d\u0430\u044f, \u0447\u0435\u043c \u043c\u0438\u0440\u043d\u0430\u044f \u043f\u0430\u0445\u043e\u0442\u0430 \u043d\u0430 \u0434\u044f\u0434\u044e.<\/p>\n<p>  \u042f \u0432\u0435\u0440\u0438\u043b \u0432 \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u043d, \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u043d\u0430\u0434 \u043a\u043e\u0434\u043e\u043c \u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u043a\u0440\u044f\u0434\u0443. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0439 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u043d\u0430\u0437\u0430\u0434, \u0443\u0436\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0441\u0442\u0430\u0442\u0435\u0439, \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u043b \u043c\u043d\u0435 \u0433\u043b\u0430\u0437\u0430 \u043d\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0435\u0449\u0435\u0439. \u0418\u0437\u043b\u0430\u0433\u0430\u044e \u0441\u0443\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043d\u0438\u0436\u0435 \u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u044c \u0434\u043b\u0438\u043d\u043d\u043e\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435:<\/p>\n<p>  <b>\u041e\u0442\u0432\u0435\u0442 \u042e\u0440\u0438\u044f \u0420\u043e\u0449\u0435\u043d\u043a\u043e<\/b><\/p>\n<p>  \u0427\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u0434 <i>i<\/i>, \u0437\u0432\u0430\u043b\u0438 <a href=\"https:\/\/ua.linkedin.com\/in\/yuriyroshchenko\">\u042e\u0440\u0438\u0439 \u0420\u043e\u0449\u0435\u043d\u043a\u043e<\/a>. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u0430 \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0432 \u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435. \u042e\u0440\u0438\u0439 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043c\u0438\u043d\u0443\u0442 \u0441\u043e\u0440\u043e\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0441\u043e \u043c\u043d\u043e\u0439, \u0437\u0430 \u0447\u0442\u043e \u044f \u0435\u043c\u0443 \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d.<\/p>\n<p>  \u0418\u0437\u043b\u043e\u0436\u0438\u0432 \u0441\u0432\u043e\u0439 \u043f\u043b\u0430\u043d \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: \u043d\u0435\u0442, \u0442\u0430\u043a \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0414\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0418 \u042e\u0440\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043a\u0430\u043a. \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0432 \u043e\u0442\u0432\u0435\u0442 \u042e\u0440\u0438\u044f \u0420\u043e\u0449\u0435\u043d\u043a\u043e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u043e\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0411\u0430\u0433\u043b\u0430\u044f, \u044f \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<p>  1. \u041e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a, \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432\u0430\u0441 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a.<\/p>\n<p>  2. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u043a\u0440\u0443\u0433\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445: \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445, \u0433\u0434\u0435 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u0434\u0440\u0443\u0437\u044c\u044f\u043c, \u0438 \u0442.\u0434. \u0414\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442. \u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0443 apofig \u0431\u044b\u043b\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u0434\u0430\u0439 \u0435\u043c\u0443 [\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e] \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0440\u0443\u043a\u0438, \u0437\u0430\u043a\u0440\u043e\u0439 \u0440\u043e\u0442 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438, \u0447\u0442\u043e \u043e\u043d \u0441 \u043d\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442\u00bb.<\/p>\n<p>  3. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0441\u0442\u0430\u043b \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u0435\u043c. \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u042e\u0440\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u2013 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u2013 <b>\u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 open source<\/b>. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e?!.. \u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0440\u044f\u0441\u0441\u044f \u043d\u0430\u0434 \u0441\u0432\u043e\u0438\u043c\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0430\u043a\u0438 \u041a\u043e\u0449\u0435\u0439 \u0411\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0434 \u0437\u043b\u0430\u0442\u043e\u043c. \u041c\u044b\u0441\u043b\u044c \u0442\u0430\u043a \u0432\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u043f\u043b\u043e\u0434\u044b \u0441\u0432\u043e\u0438\u0445 \u0442\u0440\u0443\u0434\u043e\u0432 \u0437\u0432\u0443\u0447\u0430\u043b\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043a\u0440\u0430\u043c\u043e\u043b\u043e\u0439. \u00ab\u0421\u043e\u043f\u0440\u0443\u0442!\u00bb \u2013 \u0434\u0443\u043c\u0430\u043b \u044f. \u00ab\u0423\u043a\u0440\u0430\u0434\u0443\u0442, \u0441\u043f\u043b\u0430\u0433\u0438\u0430\u0442\u044f\u0442!\u00bb \u2013 \u0434\u0443\u043c\u0430\u043b \u044f.<br \/>  \u041d\u0435\u0442, \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043c\u043d\u0435 \u042e\u0440\u0438\u0439. \u0412\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e\u2026 \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u043d \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  4. \u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 open source, \u043d\u0443\u0436\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0438\u0430\u0440\u0438\u0442\u044c. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u0433\u043b\u0430\u0441\u043a\u0438 \u2013 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432, \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0438\u0447\u0435\u0439, \u0437\u0430\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u044e\u0434\u0435\u0439. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e \u0413\u0435\u0433\u0435\u043b\u044e \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u2013 \u0432 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u043e\u0432 \u2013 \u0435\u0449\u0451 \u0432\u044b\u0448\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 <a href=\"https:\/\/help.github.com\/articles\/about-stars\/\">\u0437\u0432\u0451\u0437\u0434<\/a>. \u0411\u043e\u043b\u044c\u0448\u0435 \u0437\u0432\u0451\u0437\u0434, \u0432\u044b\u0448\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0433\u043b\u0430\u0441\u043a\u0438 \u0438\u2026 \u043a\u0440\u0443\u0433 \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442\u0441\u044f. \u0418 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e, \u0447\u0442\u043e \u043a\u0440\u0443\u0433 \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u2013 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e.<br \/>  <i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/i> \u0415\u0441\u043b\u0438 \u043d\u0435 \u044f\u0441\u043d\u043e, \u043a\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u044b \u2013 \u043d\u0435 \u0431\u0435\u0434\u0430. \u0412\u043e\u0442 <a href=\"https:\/\/guides.github.com\/activities\/contributing-to-open-source\/\">\u0441\u0441\u044b\u043b\u043a\u0430<\/a> \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043e \u0440\u043e\u043b\u044f\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 GitHub. \u041a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u044b \u2013 \u044d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043d\u043e\u0441\u044f\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 (pull request) \u0432 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>  5. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041d\u0443\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c, \u043a\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u2013 \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c \u0441\u0432\u043e\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0430\u043c, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0446\u0435\u043d\u0435\u043d.<br \/>  \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u043e\u0440\u043a \u0441\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u0438\u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043a\u0430\u043a\u0438\u043c\u0438-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0438 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0444\u0438\u0447\u0430\u043c\u0438.<br \/>  \u041a\u0430\u043a \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446, \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: \u043a \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439, \u043a \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0432\u0430\u043c \u043a\u0430\u043a \u043a \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<br \/>  \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u042e\u0440\u0438\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0435 \u0443\u043a\u0440\u0430\u0434\u0443\u0442 \u0438 \u043d\u0435 \u0441\u043f\u043b\u0430\u0433\u0438\u0430\u0442\u044f\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0433\u043b\u0443\u0431\u0436\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043a\u043e\u0434, \u0438\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0440\u0432\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0441\u0438\u043b \u0438\u043b\u0438 \u2013 \u0433\u043e\u0432\u043e\u0440\u044f \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u2013 \u0434\u0435\u043d\u0435\u0433. \u0410 \u044d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0440\u043e\u0436\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0435\u0451 \u043a\u043b\u043e\u043d\u0430.<\/p>\n<p>  6. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0430\u043d\u0435\u0442-\u0442\u0430\u043a\u0438 \u0430\u0441\u0442\u0440\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c, \u0438 \u0432\u044b \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0435, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c Google \u0445\u043e\u0447\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0448\u0442\u0443\u043a\u0443, \u043a\u0430\u043a \u0443 \u0432\u0430\u0441 \u2013 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0434\u0430\u0442\u044c\u0441\u044f \u2013 \u044d\u0442\u043e \u0443\u0441\u043f\u0435\u0445, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u0413\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u043f\u043e\u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043d\u0435\u0433, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438\u043c \u0432\u0440\u044f\u0434 \u043b\u0438 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430 \u0432\u0441\u044e \u0436\u0438\u0437\u043d\u044c.<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0437\u0430\u0430\u0440\u0442\u0430\u0447\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0438\u0441\u043a, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c Google \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u0430\u043a \u0443 \u0432\u0430\u0441, \u0438 \u0432\u044b \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0435\u0441\u044c \u0443 \u0440\u0430\u0437\u0431\u0438\u0442\u043e\u0433\u043e \u043a\u043e\u0440\u044b\u0442\u0430.<\/p>\n<p>  \u041f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0451. \u0414\u043e\u0431\u0430\u0432\u043b\u044e \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043e\u0442 \u042e\u0440\u0438\u044f:<br \/>  \u2013 \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0434\u0432\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430: (1) \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u043e\u0440\u043a, \u0438 (2) \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u0443\u043f\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<br \/>  \u2013 \u0425\u0430\u0431\u0440\u0430 \u2013 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. \u041c\u043e\u0439 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0437\u0434\u0435\u0441\u044c \u0440\u0435\u0431\u044f\u0442\u0430 \u0438\u0437 PVS-studio, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044e\u0442 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043b\u044e\u0434\u044f\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438.<br \/>  \u2013 \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u2013 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u043e\u0436\u0435.<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c, \u044f \u0438\u0437\u043b\u043e\u0436\u0438\u043b \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u044b\u0441\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043d\u0435\u0441 \u0438\u0437 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0418, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0442\u0430\u043a\u0436\u0435, \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443. \u0423\u0432\u0435\u0440\u0435\u043d, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u2026 \u0434\u0430, \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b. \u042f \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb, \u043e\u0442\u0449\u0438\u043f\u043d\u0443\u0442\u043e\u0439 \u043e\u0442 \u043d\u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041d\u0430 \u0435\u0451 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0432\u043e \u044d\u0442\u043e \u2013 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u041f\u041e \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u041f\u0440\u043e\u0439\u0442\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e\u0442\u043e\u043c \u0434\u043b\u044f \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb\u2026 \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044f \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0442\u043e\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 cpprt, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u043e\u044e \u0437\u0430\u0434\u0443\u043c\u043a\u0443 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0435\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u2026 \u041d\u043e \u044f \u043e\u043f\u0440\u0430\u0432\u0434\u044b\u0432\u0430\u044e \u0441\u0435\u0431\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0446\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0445\u043e\u0442\u044f\u0442 \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e \u043e\u043a\u0443\u043f\u0438\u0442 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b, \u0434\u043e\u0440\u043e\u0433\u0438\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u043d\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0441\u0442\u0430\u0442\u0435\u0439.  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<\/p>\n<p>  <a href=\"https:\/\/toster.ru\/q\/236510\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f<\/a>. \u0412 \u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0437\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<br \/>  <i>\u0417\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c:<\/i> \u0414\u0430\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u0438\u0435 \u0448\u0438\u0448\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0434\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main(). \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0421++ \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439.<\/p>\n<p>  <a href=\"https:\/\/toster.ru\/q\/236510\">\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f<\/a>. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: \u0432\u044b\u0431\u043e\u0440 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 CMake, \u0438 \u0442.\u0434.<br \/>  <i>\u0417\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c:<\/i> \u0414\u0430\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043b\u044e\u0434\u044f\u043c, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u044b\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0441\u0432\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043b\u044e\u0434\u044f\u043c.<\/p>\n<p>  <a href=\"https:\/\/toster.ru\/q\/236510\">\u0422\u0440\u0435\u0442\u044c\u044f \u0447\u0430\u0441\u0442\u044c, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f<\/a>. \u0417\u0434\u0435\u0441\u044c \u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 use cases \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, API \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u0432, API \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<br \/>  <i>\u0417\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c:<\/i> \u0414\u0430\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043b\u044e\u0434\u044f\u043c, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 cpprt \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0441\u043d\u043e\u0432\u0430, \u0434\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u044e \u043b\u0435\u043f\u0442\u0443 \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435, \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u00ab\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb.<\/p>\n<p>  \u0417\u0430 \u0441\u0438\u043c \u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e \u043e \u0446\u0438\u043a\u043b\u0435, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0436\u0443 \u043a \u0441\u0443\u0442\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  <a name=\"introduction\"><\/a><\/p>\n<h3>0. \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<p>  <a href=\"#introduction\">\u0420\u0430\u0437\u0434\u0435\u043b \u21160<\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b. \u0417\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cpprt \u0438 \u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b\u0441\u043b\u0438 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0442\u043e\u0433\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 cpprt \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432.<br \/>  <a href=\"#motivation\">\u0420\u0430\u0437\u0434\u0435\u043b \u21161<\/a>. \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u0432 \u0421++.<br \/>  <a href=\"#first_find\">\u0420\u0430\u0437\u0434\u0435\u043b \u21162<\/a>. \u041f\u0440\u043e \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<br \/>  <a href=\"#first_impl\">\u0420\u0430\u0437\u0434\u0435\u043b \u21163<\/a>. \u041f\u0440\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<br \/>  <a href=\"#first_problems\">\u0420\u0430\u0437\u0434\u0435\u043b \u21164<\/a>. \u041f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u043c\u0435\u043b\u0438\u0441\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b.<br \/>  <a href=\"#inheritance\">\u0420\u0430\u0437\u0434\u0435\u043b \u21165<\/a>. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438.<br \/>  <a href=\"#final\">\u0420\u0430\u0437\u0434\u0435\u043b \u21166<\/a>. \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440.<\/p>\n<p>  \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e:<br \/>  1. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<br \/>  2. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 runtime.<\/p>\n<p>  \u0423\u0436\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0434 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u043e\u0434\u043a\u0438\u043d\u0443\u043b \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u043e\u0442 \u043d\u0430 <a href=\"https:\/\/habrahabr.ru\/post\/257071\/\">\u044d\u0442\u043e\u0442 \u043e\u0431\u0437\u043e\u0440<\/a> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412 \u043d\u0451\u043c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0441\u043d\u0430\u0449\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0421++ \u0442\u043e\u043b\u0441\u0442\u0435\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u044d\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430: \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b\u2026 \u041a\u043e\u0440\u043e\u0447\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043a\u0443\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u0446\u0435\u043b\u044b\u0445 \u043e\u043a\u0435\u0430\u043d\u0430\u0445 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041c\u043e\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u044b\u043c\u0438 \u0432 \u0442\u0435\u043d\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e, \u0447\u0443\u0442\u044c \u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0432\u0448\u0438\u0441\u044c, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u043c\u043d\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435: \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u0430\u043a \u044f \u0438\u0445 \u0440\u0435\u0448\u0430\u043b. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430.<\/p>\n<p>  \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0441 CMake, \u0441 \u043c\u0438\u0440\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u041f\u041e \u0438 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041d\u0443 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u0430, \u043f\u0443\u0441\u0442\u044c \u043c\u043e\u044f \u043c\u0438\u043a\u0440\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u0443\u0431\u0440\u0430\u043c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0421++. \u041d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0451 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u2013 \u0442\u0435\u043c \u043b\u0435\u0433\u0447\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u0441\u043e\u0437\u043d\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0442\u0435\u043c \u043b\u0435\u0433\u0447\u0435 \u0435\u0451 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0443\u0436\u043d\u0430 \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043c\u043e\u0449\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041d\u0443\u0436\u0435\u043d \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u2013 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c cpprt.<\/p>\n<p>  <a name=\"motivation\"><\/a><\/p>\n<h3>1. \u0417\u0430\u0447\u0435\u043c \u043c\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b<\/h3>\n<p>  \u0421++ \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u0432\u043e\u0435\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e. \u041a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043d\u0430 \u043d\u0451\u043c, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0421++ \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u043e \u0437\u0430 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p>  \u041d\u0430 \u0430\u043b\u0442\u0430\u0440\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430, \u0435\u0441\u0442\u044c <a href=\"https:\/\/en.wikibooks.org\/wiki\/C%2B%2B_Programming\/RTTI\">RTTI<\/a> \u0441 \u0435\u0433\u043e typeid \u0438 dynamic_cast. \u0415\u0441\u0442\u044c <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_58_0\/libs\/type_traits\/doc\/html\/index.html\">Boost.TypeTraits<\/a>. \u041d\u043e RTTI \u0447\u0430\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (<a href=\"http:\/\/stackoverflow.com\/questions\/579887\/how-expensive-is-rtti\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443<\/a>), \u0430 Boost.TypeTraits, \u0431\u0443\u0434\u0443\u0447\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445, \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0434\u0440\u0443\u0436\u0438\u0442 \u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u0432\u043e\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c. \u041c\u043d\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441. \u0417\u0432\u0443\u0447\u0438\u0442, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>  \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041f\u0443\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ISerializable \u0434\u043e\u043b\u0436\u0435\u043d \/\/ \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c class ISerializable { \tvirtual void save(Serializer *inSerializer) = 0; \tvirtual void load(Deserializer *inDeserializer) = 0; }  class Base : public ISerializable { \tvirtual void save(Serializer *inSerializer) { \/* \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 inSerializer *\/ } \tvirtual void load(Deserializer *inDeserializer) { \/* \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 inDeserializer *\/ } };  class Derived : public Base { \tvirtual void save(Serializer *inSerializer) { \/* \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 inSerializer *\/ } \tvirtual void load(Deserializer *inDeserializer) { \/* \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 inDeserializer *\/ } }; <\/code><\/pre>\n<p>  \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"cpp\">Base *theBase = new Derived(); . . . Serializer theSerializer(&quot;save.txt&quot;); theSerializer.save(&quot;name&quot;, theBase); theSerializer.flush(); . . . Deserializer theDeserializer(&quot;save.txt&quot;); theBase = theDeserializer.load(&quot;name&quot;); <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 save(&#8230;) \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430. \u041d\u043e \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441 \u0431\u044b\u043b \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u044d\u0442\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0435 API \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u042d\u0442\u0430 \u0436\u0435 \u043c\u044b\u0441\u043b\u044c \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">class Serializer { \tvoid saveInt(const char *inName, int inValue) { ... } \tvoid saveString(const char *inName, const std::string &inValue) { ... } \t\/\/ . . .  \t\/\/ \u0422\u0443\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u2013 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \t\/\/ \u043c\u0435\u0442\u043e\u0434\u0430 save( ) \u0443 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 save(...) \tvoid saveObject(ISerializable *inObject) { inObject-&gt;save(this); } };  class Deserializer { \tint loadInt(const char *inName) { ... } \tvoid loadString(const char *inName, std::string &outValue) { ... } \t\/\/ . . .  \tISerializable *loadObject() { \t\t\/\/ \u0410 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \t\t\/\/ \u0431\u044b\u043b \u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u2013 \u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u044f\u0441\u043d\u043e, \u043e\u0431\u044a\u0435\u043a\u0442 \t\t\/\/ \u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \t\tISerializable *theObject = new &lt; ??? &gt;( ) \t\ttheObject-&gt;load(this); \t\treturn theObject; \t} }; <\/code><\/pre>\n<p>  \u0412\u044b\u0432\u043e\u0434: \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c API. \u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c!<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a74\/01c\/263\/a7401c2631a54b18bff049a5f584b0e0.png\"\/><\/p>\n<pre><code class=\"cpp\">void saveObject(ISerializable *inObject) { \t\/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0437\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \tthis-&gt;saveObjectType(inObject-&gt;classID()); \/\/ &lt;&lt;&lt;--\u2013 classID() \tinObject-&gt;save(this); };  ISerializable *loadObject() { \t\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \tISerializable *theObject = objectFabric().create( \t\t\tthis-&gt;loadObjectType());\/\/ &lt;&lt;&lt;--\u2013 objectFabric().create(...) \ttheObject-&gt;load(this); \treturn theObject; }; <\/code><\/pre>\n<p>  \u041d\u0430\u043a\u0438\u0434\u0430\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0449\u0438\u0439 \u0432\u0438\u0434 \u043d\u0443\u0436\u043d\u043e\u0433\u043e API, \u044f \u0432\u0437\u044f\u043b\u0441\u044f \u0437\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<p>  <a name=\"first_find\"><\/a><\/p>\n<h3>2. \u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u043b, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u0443\u043c\u0430\u044e\u0442 \u043b\u044e\u0434\u0438. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0447\u0435\u0433\u043e-\u0442\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e, \u0431\u0435\u0437 \u0442\u044b\u0441\u044f\u0447\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0432\u0440\u043e\u0434\u0435 <a href=\"http:\/\/doc.qt.io\/qt-4.8\/moc.html\">Qt MOC<\/a> (\u0435\u0449\u0451 <a href=\"https:\/\/habrahabr.ru\/post\/214379\/\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043d\u0430 \u0442\u0435\u043c\u0443) \u0438, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438. \u041d\u0430\u0439\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c, \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u0443\u0436\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u0437\u043e\u0440 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 (<a href=\"https:\/\/habrahabr.ru\/post\/257071\/\">\u0432\u043e\u0442 \u043e\u043d\u0430<\/a> \u0435\u0449\u0451 \u0440\u0430\u0437). \u041e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0447\u0442\u043e google \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u00abc++ reflection\u00bb \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e <a href=\"https:\/\/habrahabr.ru\/post\/243571\/\">\u00ab\u041c\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043a reflection \u0432 c++\u00bb<\/a>, \u0430 \u043d\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e.  <\/div>\n<\/div>\n<p>  \u042f \u043d\u0430\u0447\u0430\u043b \u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u044f, \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c, \u043a\u0440\u0443\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\/\u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u043b \u043d\u0443\u0436\u043d\u0443\u044e \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <a href=\"http:\/\/stackoverflow.com\/questions\/582331\/is-there-a-way-to-instantiate-objects-from-a-string-holding-their-class-name\/582456#582456\">\u0432\u043e\u0442 \u044d\u0442\u043e\u0442<\/a> \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 stackoverflow (\u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 <a href=\"http:\/\/stackoverflow.com\/users\/34509\/johannes-schaub-litb\">Johannes Schaub<\/a>, \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0435\u043c\u0443 \u0437\u0430 \u0438\u0434\u0435\u044e), \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0451\u043c \u0432\u043e\u043f\u043b\u043e\u0442\u0438\u043b\u0438\u0441\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0435\u0442\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0434\u0435\u044f, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f Johannes Schaub, \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0435\u0451 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435. \u0418\u0434\u0435\u044f \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u2013 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a-\u0442\u043e \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e, \u0431\u0435\u0437 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u0438. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0433\u043e\u043b\u043e\u0441\u043a\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 cpprt (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432).<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0438\u0434\u0435\u044f \u043e\u0442 Johannes Schaub: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0431\u0440\u0438\u043a \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 [\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b] \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u042d\u0442\u0430 \u0438\u0434\u0435\u044f \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432: \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0437\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u0435\u0437 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0437\u0434\u0435\u0441\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Johannes Schaub \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 Johannes Schaub<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ in base.hpp:  \/\/ \u0428\u0430\u0431\u043b\u043e\u043d\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \/\/ \u0417\u0434\u0435\u0441\u044c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 Base, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 Johannes, \u043a\u0430\u043a \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \/\/ \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \/\/ \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0438\u0437 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c  \/\/ \u043d\u0430 void, \u043e\u0431\u043e\u0431\u0449\u0438\u0432, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \/\/ \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Base, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \/\/ \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c || (\u043e \u0447\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435). template&lt; typename T &gt; Base * createT() { return new T; }  \/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f &quot;\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432&quot; \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 struct BaseFactory {  \t\/\/ \u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \t\/\/ \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \t\/\/ \u043a\u043b\u0430\u0441\u0441\u0430. \u0422\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430 \u0441\u0447\u0451\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \t\/\/ \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 createT \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \t\/\/ (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439). \ttypedef std::map&lt; std::string, Base*(*)() &gt; map_type;  \t\/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u0438\u0445 \t\/\/ \u043a\u043b\u0430\u0441\u0441\u043e\u0432... \u0414\u0443\u043c\u0430\u044e, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u043e. \tstatic Base *createInstance(std::string const& s) { \t\tmap_type::iterator it = getMap()-&gt;find(s); \t\treturn (it == getMap()-&gt;end()) ? NULL : it-&gt;second(); \t}  protected: \t\/\/ \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c-\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \t\/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f map \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d. \u0412 \u044d\u0442\u043e\u043c \t\/\/ \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \t\/\/ \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438. \tstatic map_type * getMap() { \t\t\/\/ \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 Johannes Schaub: \t\t\/\/ never delete'ed. (exist until program termination) \t\t\/\/ because we can't guarantee correct destruction order  \t\tif(!map) { map = new map_type; }  \t\treturn map;  \t}  private: \tstatic map_type * map; };  \/\/ \u041a\u043b\u0430\u0441\u0441, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0439 \/\/ \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \/\/ \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u2013 \u044d\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 T \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. template&lt; typename T &gt; struct DerivedRegister : BaseFactory {  \tDerivedRegister(std::string const& s) {  \t\tgetMap()-&gt;insert(std::make_pair(s, &createT&lt; T &gt;)); \t} };  \/\/ in derivedb.hpp  \/\/ \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \/\/ \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 Johannes Schaub. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, Johannes Schaub \/\/ \u0437\u0430\u0431\u044b\u043b \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0442 Base. \u042f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u044d\u0442\u043e: class DerivedB : public Base { \t...; private:  \t\/\/ \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043f\u0440\u0435\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 reg. \tstatic DerivedRegister&lt; DerivedB &gt; reg; };  \/\/ in derivedb.cpp:  \/\/ \u0417\u0434\u0435\u0441\u044c (\u0432 \u0444\u0430\u0439\u043b\u0435, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 DerivedB) \/\/ \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \/\/ \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \/\/ \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 DerivedRegister&lt; DerivedB &gt; \u0438 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \/\/ \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c DerivedB DerivedRegister&lt; DerivedB &gt; DerivedB::reg(&quot;DerivedB&quot;); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  Johannes Schaub \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043a\u043e\u0434 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u0435\u0435:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043e\u0442 Johannes Schaub<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define REGISTER_DEC_TYPE(NAME) \\ \tstatic DerivedRegister&lt;NAME&gt; reg  #define REGISTER_DEF_TYPE(NAME) \\ \tDerivedRegister&lt;NAME&gt; NAME::reg(#NAME) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0432\u0437\u044f\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Johannes Schaub \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443, \u0447\u0443\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0432\u043a\u0443\u0441\u0443.<\/p>\n<p>  <a name=\"first_impl\"><\/a><\/p>\n<h3>3. \u041f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u0412 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 Johannes Schaub \u0438\u043c\u0435\u043b\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 DerivedRegister, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (static DerivedRegister  reg). \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043a\u043b\u0430\u0441\u0441 DerivedRegister \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0417\u0430 \u0441\u0447\u0451\u0442 \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0441 DerivedRegister.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 DerivedRegister, \u043d\u0430\u0447\u0430\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u043f\u043e\u043a\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430).<\/p>\n<p>  \u0412\u044b\u0448\u043b\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\">\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430<\/a> \u0441 \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u043e\u0440\u043e\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main():<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ClassManager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ \u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (\u0430\u043d\u0430\u043b\u043e\u0433 DerivedRegister \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \/\/ Johannes Schaub). \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \/\/ \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \/\/ \u043c\u0435\u0442\u043e\u0434 createAbstractObject() \/\/ class IClassManager { private: \tconst char *_name;  public: \tIClassManager(const char *inClassName) : _name(inClassName) { }  \t\/\/-\u2013 Workflow \tconst const char *name() const { return _name; } \tvirtual IManagedClass *createAbstractObject() = 0; };  \/\/----------------------------------------------------------------- \/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \/\/ \u043c\u0435\u0442\u043e\u0434 \u0438 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f \/\/ \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0441\u0430\u0445. \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430. template&lt;typename T_Type&gt; class ClassManager : public IClassManager { public: \t\/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0438 \u0432 \u043a\u043e\u0434\u0435 \t\/\/ Johannes Schaub, \u0432\u043e\u0442 \u0442\u0443\u0442, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435: \tClassManager(const char *inClassName) : IClassManager(inClassName) { \t\tglobalRuntime.registerClass(this); \t}  \tT_Type *createObject() { return new T_Type(); } \tvirtual IManagedClass *createAbstractObject() { return createObject(); } }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f globalRuntime \u2013 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0439 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435\u0440\u0438\u0435\u0439. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430, \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2013 \u044d\u0442\u043e globalRuntime. \u0414\u0443\u043c\u0430\u044e, \u0441\u0443\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u044f\u0441\u043d\u0430 \u0431\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">CPPRuntime.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class CPPRuntime { private: \tstd::vector&lt; IClassManager * &gt; _registries;  \tIClassManager *managerByName(const char *inName);  public: \tCPPRuntime() : _registries() { }  \tvoid registerClass(IClassManager *inClass); \tIManagedClass *createObject(const char *inClassName); };  \/\/----------------------------------------------------------------------------- extern CPPRuntime globalRuntime; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">CPPRuntime.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">IClassManager *CPPRuntime::managerByName(const char *inName) { \tfor (size_t theIndex = 0, theSize = _registries.size(); \t\t\ttheIndex &lt; theSize; ++theIndex) \t{ \t\tif (0 == strcmp(_registries[theIndex]-&gt;name(), inName)) { \t\t\treturn _registries[theIndex]; \t\t} \t} \treturn NULL; }  \/\/-\u2013 Registering void CPPRuntime::registerClass(IClassManager *inClass) { \t_registries.push_back(inClass); }  \/\/-\u2013 Public API IManagedClass *CPPRuntime::createObject(const char *inClassName) { \tIClassManager *theRegistry = managerByName(inClassName); \t\/\/TODO: Through an exception if no class found \treturn theRegistry-&gt;createAbstractObject(); }  \/\/----------------------------------------------------------------------------- CPPRuntime globalRuntime; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 IManagedClass (\u0430\u043d\u0430\u043b\u043e\u0433 \u043a\u043b\u0430\u0441\u0441\u0430 Base \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u044f Johannes Schaub) \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<p>  \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 IManagedClass, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c API, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0451 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c:<\/p>\n<p>  1. <b>API \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/b>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443:<br \/>  <i>objectFabric().create(inObjectID)<\/i><br \/>  \u042d\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e, \u043c\u0435\u0442\u043e\u0434 globalRuntime.createObject(\u00abClassName\u00bb).<\/p>\n<p>  2. <b>API \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/b>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<br \/>  <i>object-&gt;classID()<\/i><br \/>  <i>\u0420\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 Johannes Schaub, \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u043e \u0432 \u0441\u0435\u0431\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 API. \u0415\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e<\/i>.<\/p>\n<p>  \u042f \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b use case \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f IManagedClass \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0414\u0443\u043c\u0430\u044e, \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u044f\u0441\u043d\u043e \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TestClass.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/--------------------------------------------------------------------------------------------------- \/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \/\/ \u0417\u0430\u0434\u0430\u0451\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u0441\u0435\u0445 \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. class IClassManager { public: \tvirtual IClassManager *getRegistry() = 0; };  \/\/--------------------------------------------------------------------------------------------------- \/\/ \u041a\u043b\u0430\u0441\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \/\/ \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u0432\u043e\u0438\u0445 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0439 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0447\u0442\u043e\u0431\u044b \/\/ \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043d\u0438\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \/\/ \u043a \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. class TestClass : public IClassManager { public: \t\/\/ \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0415\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0437\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c. \tstatic ClassManager&lt; TestClass &gt; gClassManager;  \tvirtual IClassManager *getRegistry() { return &gClassManager; } public: }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TestClass.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ \u0412\u044b\u0437\u043e\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 gClassManager \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \/\/ \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 TestClass \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \/\/ \u0438\u043c\u0435\u043d\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u043e\u0436\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0437\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c. ClassManager&lt; TestClass &gt; TestClass::gClassManager(&quot;TestClass&quot;); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u043e\u0442\u0434\u0435\u0431\u0430\u0436\u0438\u043b \u0432\u044b\u0437\u043e\u0432 globalRuntime.createObject(\u00abTestClass\u00bb). \u041e\u0431\u044a\u0435\u043a\u0442 \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043d\u044f\u043b\u0438 \u0431\u044b \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043f\u0438-\u043f\u0430\u0441\u0442\u0443 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Macros.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define CPPRT_DECLARATION(M_ClassName)\\ \tpublic:\\ \t\tstatic ClassManager&lt; M_ClassName &gt; gClassManager;\\ \t\tvirtual IClassManager *getClassManager() { return &gClassManager; }\\ \tprotected:\\  \/\/ \u0427\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 namespace. #define CPPRT_IMPLEMENTATION(M_ClassName) ClassManager&lt; M_ClassName &gt; M_ClassName::gClassManager(#M_ClassName); <\/code><\/pre>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/b> \u0422\u0443\u0442 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 CPPRT. \u042d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u043b\u043e\u0432 <i>C Plus Plus Run Time<\/i>.<\/p><\/div>\n<\/div>\n<p>  \u041c\u0430\u043a\u0440\u043e\u0441 \u0431\u044b\u043b \u0433\u043e\u0442\u043e\u0432. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e Johannes Schaub:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 TestClass. \u0414\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441:<\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 TestClass.h --- class TestClass : public IClassManager { \t\/\/ \u042d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \t\/\/ \u043a\u043b\u0430\u0441\u0441\u0430 \u2013 \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \t\/\/ \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043a\u0430\u043a protected \tCPPRT_DECLARATION(TestClass) . . . }; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0444\u0430\u0439\u043b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043b\u0430\u0441\u0441\u0435 CPPRT_IMPLEMENTATION (\u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441 CPPRT_DECLARATION \u043c\u044b \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438).<\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 TestClass.cpp --- CPPRT_IMPLEMENTATION(TestClass) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u0414\u0440\u043e\u0436\u0430 \u043e\u0442 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043d\u0438\u044f, \u044f \u043e\u0431\u0432\u044f\u0437\u0430\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u0435\u0436\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e API, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u0434\u2026<\/p>\n<p>  \u0423\u0440\u0430! \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438\u0441\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0441\u0432\u043e\u0439 \u0442\u0438\u043f! \u042f \u0445\u043e\u0440\u043e\u0448\u0435\u043d\u044c\u043a\u043e \u0432\u0441\u0451 \u043e\u0442\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u043e! \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u043b, \u0447\u0442\u043e \u0441\u0445\u043e\u0434\u0443 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u0451\u0442\u0441\u044f\u2026<\/p>\n<p>  <a name=\"first_problems\"><\/a><\/p>\n<h3>4. \u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0431\u043e\u0440\u044c\u0431\u0430 \u0441 \u043d\u0438\u043c\u0438<\/h3>\n<p>  \u2026 \u0438 \u044f \u0431\u044b\u043b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u2013 \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u2013 \u0432\u0441\u0451 \u043f\u043e\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u044f \u0443\u043b\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0433. \u0420\u0430\u043d\u0434\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u0441 \u0434\u0435\u0431\u0430\u0433\u0430 \u043d\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 ClassManager \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438\u2026 \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u043e \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 globalRuntime.createObject(\u00abSomeHellClass\u00bb), \u0442\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 ClassManager \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 SomeHellClass.<\/p>\n<p>  \u041c\u0438\u043d\u0443\u0442 \u0442\u0440\u0438\u0434\u0430\u0442\u044c \u043c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u043d\u0430\u0441 \u0434\u0432\u043e\u0438\u0445 \u0441\u043e\u0448\u0451\u043b \u0441 \u0443\u043c\u0430: \u043b\u0438\u0431\u043e \u044f, \u043b\u0438\u0431\u043e \u0421++. \u0418, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441 \u0443\u043c\u0430 \u0441\u043e\u0448\u0451\u043b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044f. \u0412\u0441\u0451 \u0441\u0442\u0430\u043b\u043e \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\/\u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0445 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0435\u043d\u044f\u043b\u0441\u044f \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c\u00bb. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u0435\u043b\u043e \u0431\u044b\u043b\u043e \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u041b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u043b\u0438 \u043a\u043e\u0434, \u0434\u0443\u043c\u0430\u044e, \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u0432 \u0447\u0451\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0431\u044b\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d globalRuntime:<\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 CPPRuntime.h --- extern CPPRuntime globalRuntime;  \/\/--\u2013 CPPRuntime.cpp --- CPPRuntime globalRuntime; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u041d\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 ClassManager, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0431\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 globalRuntime:<\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 ClassManager.h --- ClassManager(const char *inClassName) \t: IClassManager(inClassName) { \tglobalRuntime.registerClass(this); } <\/code><\/pre>\n<p>  \u0418 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0435\u0449\u0451, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager (\u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u044b):<\/p>\n<pre><code class=\"cpp\">#define CPPRT_DECLARATION(M_ClassName)\\ \tpublic:\\ \t\tstatic ClassManager&lt; M_ClassName &gt; gClassManager;\\ \t\tvirtual IClassManager *getClassManager() { return &gClassManager; }\\ \tprotected:\\  #define CPPRT_IMPLEMENTATION(M_ClassName)\\ \tClassManager&lt; M_ClassName &gt; M_ClassName::gClassManager(#M_ClassName); <\/code><\/pre>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u044a\u0435\u043a\u0442 SomeHellClass::gClassManager) \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438!.. \u0414\u043e\u043b\u0436\u043d\u044b \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438: \u0432\u0435\u0434\u044c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 main(), \u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c: \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0421++?.. \u0414\u0430, \u0432\u0435\u0440\u043d\u043e. \u0412 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 (<a href=\"http:\/\/stackoverflow.com\/questions\/1271248\/c-when-and-how-are-c-global-static-constructors-called\/1271692#1271692\">stackoverflow<\/a>, \u0446\u0438\u0442\u0430\u0442\u0430 \u0438\u0437 \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0442\u0430\u043c \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f). \u0427\u0442\u043e \u0436\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442?<\/p>\n<p>  \u0410 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 globalRuntime \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <i>\u043f\u043e\u0441\u043b\u0435<\/i> \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u0437\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u0430\u044f: \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager (\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 gClassManager) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u043d (globalRuntime). \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0432\u0430\u043b\u0443, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u2013 \u0447\u0442\u043e \u0435\u0449\u0451 \u0445\u0443\u0436\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 undefined behavior.<\/p>\n<p>  \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a. \u041d\u0438\u043a\u043e\u0433\u0434\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0430\u043c\u043e\u0435 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 globalRuntime \u043e\u0442\u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u00ab\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e\u00bb \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0440\u043d\u044f\u043c\u0438 \u043a\u043e\u043b\u043b\u0441\u0442\u0435\u043a\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 main(), \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 main().  <\/div>\n<\/div>\n<p>  \u0424\u0438\u043a\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 <a href=\"http:\/\/stackoverflow.com\/questions\/17712001\/how-is-meyers-implementation-of-a-singleton-actually-a-singleton\">\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430 \u041c\u0435\u0439\u0435\u0440\u0441\u0430<\/a> (\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f <a href=\"https:\/\/habrahabr.ru\/post\/147373\/\">\u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430\u0445<\/a>, \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d):<\/p>\n<p>  <s><i>extern CPPRuntime globalRuntime;<\/i><\/s>  <\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 CPPRuntime.h --- CPPRuntime &globalRuntime(); <\/code><\/pre>\n<p>  <s><i>CPPRuntime globalRuntime;<\/i><\/s>  <\/p>\n<pre><code class=\"cpp\">\/\/--\u2013 CPPRuntime.cpp --- CPPRuntime &globalRuntime() { \t\/\/ \u0414\u0430, \u0437\u043d\u0430\u044e, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0434\u0440\u0443\u0436\u0438\u0442 \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \t\/\/ \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0438 \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u2013 \u0432\u0435\u0434\u044c \u0443 \u043d\u0430\u0441 \u043d\u0435 \t\/\/ header only \u043a\u043e\u0434. \u041f\u0443\u043b\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043d\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 thread safe... \tstatic CPPRuntime sCPPRuntime; \treturn sCPPRuntime; } <\/code><\/pre>\n<p>  \u0414\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 CPPRuntime \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0444\u0438\u043a\u0441\u0430 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 CPPRuntime:<\/p>\n<pre><code class=\"cpp\">ClassManager(const char *inClassName) \t: IClassManager(inClassName) { \t\/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 CPPRuntime \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c, \t\/\/ \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e globalRuntime() \tglobalRuntime().registerClass(this); } <\/code><\/pre>\n<p>  \u042f \u0445\u043e\u0440\u043e\u0448\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u0433\u043e\u043d\u044f\u043b \u043a\u043e\u0434 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u2013 \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c-\u0442\u043e \u0443\u0436 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>  \u0412\u0441\u0451 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>  \u0428\u043b\u043e \u0432\u0440\u0435\u043c\u044f, \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0436\u0438\u043b\u0430 \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u044c\u044e, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0430\u0441\u044c. \u0418 \u0432\u043e\u0442 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u2026<\/p>\n<p>  <a name=\"inheritance\"><\/a><\/p>\n<h3>5. \u0413\u0435\u043d\u0435\u0430\u043b\u043e\u0433\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/h3>\n<p>  \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438, \u0437\u0430\u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u2013 \u043e\u0431 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u0432\u0435\u0441\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439: \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0434\u043b\u044f \u043e\u0441\u043e\u0431\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 boost (is_base_of) \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 compile time (\u043e\u0431 <a href=\"http:\/\/stackoverflow.com\/questions\/2910979\/how-does-is-base-of-work\">\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u044b<\/a> is_base_of \u0438 \u043e\u0431 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_58_0\/libs\/type_traits\/doc\/html\/boost_typetraits\/reference\/is_base_of.html\">API<\/a> \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 boost).<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u043e\u043d\u043e, \u043e\u043f\u044f\u0442\u044c\u2026 \u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c!<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a74\/01c\/263\/a7401c2631a54b18bff049a5f584b0e0.png\"\/><\/p>\n<p>  API \u0432\u0438\u0434\u0435\u043b\u043e\u0441\u044c \u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code class=\"cpp\">std::vector&lt; IClassManager * &gt; theChildManagers;  \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager \/\/ (\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043a \u043e\u0431\u0449\u0435\u043c\u0443 \u0434\u043b\u044f \u043d\u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 IClassManager) \/\/ \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 BaseClass. globalRuntime(IClassManager).getChildren(BaseClass::gClassManager, theChildManagers);  \/\/ \u0418 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2013 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0438\u043c\u0451\u043d \/\/ \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 BaseClass: std::cout &lt;&lt; &quot;Children of class &quot; &lt;&lt; BaseClass::gClassManager.name() &lt;&lt; std::endl; for (size_t theIndex = 0, theSize = theChildManagers.size(); theIndex &lt; theSize; ++theIndex) { \tstd::cout &lt;&lt; theChildManagers[theIndex]-&gt;name() &lt;&lt; std::endl; } <\/code><\/pre>\n<p>  \u042f\u0441\u043d\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 API, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u041d\u0430\u0431\u0440\u043e\u0441\u0430\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 API \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u043e\u0432\u044b\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u044f \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435\u043c API \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<p>  \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 ClassManager \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 ClassManager \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u043e\u0442:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ClassManager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class IClassManager { private: . . . \t\/\/ \u041c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \t\/\/ \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 \tstd::vector&lt; IClassManager *&gt; _parents; \tstd::vector&lt; IClassManager *&gt; _children;  protected: \t\/\/ \u041c\u0435\u0442\u043e\u0434, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 ClassManager \u0434\u043b\u044f \t\/\/ \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \tvoid setParent(IClassManager *inParent) { \t\t_parents.push_back(inParent); \t\tinParent-&gt;_children.push_back(this); \t} . . . };  \/\/----------------------------------------------------------------- template&lt;typename T_Type&gt; class ClassManager : public IClassManager { . . . public: \t\/\/ \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445, \u0434\u0443\u043c\u0430\u044e, \t\/\/ \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \tClassManager(const char *inClassName) \t\t: IClassManager(inClassName) \t{ \t\tglobalRuntime().registerClass(this); \t}  \tClassManager(const char *inClassName, \t\t\tIClassManager *inParent0) \t\t: IClassManager(inClassName) \t{ \t\tglobalRuntime().registerClass(this); \t\tsetParent(inParent0); \t}  \tClassManager(const char *inClassName, \t\t\tIClassManager *inParent0, \t\t\tIClassManager *inParent1) \t\t: IClassManager(inClassName) \t{ \t\tglobalRuntime().registerClass(this); \t\tsetParent(inParent0); \t\tsetParent(inParent1); \t} \t \t\/\/ \u0418 \u0442.\u0434., \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 . . . }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Macros.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ 0 parents #define CPPRT_IMPLEMENTATION_0(M_Class)\\ \tClassManager&lt; M_Class &gt; M_Class::gClassManager(#M_Class);  \/\/ 1 parent #define CPPRT_IMPLEMENTATION_1(M_Class, M_BaseClass0)\\ \tClassManager&lt; M_Class &gt; M_Class::gClassManager(#M_Class,\\ \t\t&M_BaseClass0::gClassManager);  \/\/ 2 parents #define CPPRT_IMPLEMENTATION_2(M_Class, M_BaseClass0, M_BaseClass1)\\ \tClassManager&lt; M_Class &gt; M_Class::gClassManager(#M_Class,\\ \t\t&M_BaseClass0::gClassManager,\\ \t\t&M_BaseClass1::gClassManager);  \/\/ \u0418 \u0442.\u0434., \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 CPPRuntime \u043c\u0435\u0442\u043e\u0434, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager. \u041a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u043a\u043e\u043c \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043c\u0435\u043b \u0434\u0435\u043b\u043e \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">CPPRuntime.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class CPPRuntime { \t. . . private: \t\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \tvoid CPPRuntime:: getClassRegistries_internal( \t\t\tIClassManager *inClassManager, \t\t\tstd::vector&lt;IClassManager *&gt; &outRegistries)  public: \t\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u0430 CPPRuntime. \t\/\/ \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f getClassRegistries_internal(...) \t\/\/ \u0422\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 API \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \t\/\/ \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0440\u0435\u0432\u0430. \tvoid getChildren(IClassManager *inBaseRegistry, \t\t\tstd::vector&lt; IClassManager *&gt; inChildRegistries); \t. . . }; . . . <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">CPPRuntime.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">. . . void CPPRuntime::getClassRegistries_internal( \t\tIClassManager *inRegistry, \t\tstd::vector&lt;IClassManager *&gt; &outRegistries) { \t\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 ClassManager \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \toutRegistries.push_back(inRegistry);  \tstd::vector&lt; IClassManager * &gt; &theChilds = inRegistry-&gt;_childs; \tfor (size_t theIndex = 0, theSize = theChilds.size(); theIndex &lt; theSize; \t\t\t++theIndex) \t{ \t\t\/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \t\t\/\/ \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e ClassManager \t\tgetClassRegistries_internal(theChilds[theIndex], outRegistries); \t} }   void CPPRuntime::getChildren(IClassManager *inBaseRegistry, \t\t\tstd::vector&lt; IClassManager *&gt; &outRegistries) { \tgetClassHeirarhieNames_internal(inBaseRegistry, outRegistries); } . . . <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0438\u0437-\u0437\u0430 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u0438 (\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044e inRegistry-&gt;_childs \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 CPPRuntime:: getClassRegistries_internal). \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 ClassManager \u0433\u0435\u0442\u0442\u0435\u0440\u043e\u043c \u043f\u043e\u043b\u044f _children, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <a href=\"http:\/\/cppstudio.com\/post\/8423\/\">friend<\/a>. \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0443\u043a\u043b\u044e\u0436\u0435\u0435, \u043d\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0433\u0435\u0442\u0442\u0435\u0440 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043f\u043b\u043e\u0445\u043e:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ClassManager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template&lt; typename T_Type &gt; class ClassManager : public IClassManager { \t. . . \t\/\/ \u0427\u0442\u043e\u0431\u044b CPPRuntime \u0438\u043c\u0435\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a _children. \tfriend class CPPRuntime; \t. . . }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f friend \u043a\u043e\u0434 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f. \u0411\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0434 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u2014 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u041d\u043e \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u044b\u043b \u043d\u0430\u0443\u0447\u0435\u043d \u0433\u043e\u0440\u044c\u043a\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f\/\u0443\u0434\u0430\u043b\u044f\u044f \u0444\u0430\u0439\u043b\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0418 \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u043b\u0435\u0437 \u043a\u043e\u0441\u044f\u043a: \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c\u2026 \u041f\u0440\u0438\u0447\u0451\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u044b _parents \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0430 \u0432\u043e\u0442 _children \u2013 \u043d\u0435\u0442. \u0414\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u0432 \u0447\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435: \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0412\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 ClassManager:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Macros.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define CPPRT_IMPLEMENTATION_NO_PREFIX_1(M_Class, M_BaseClass0)\\ \tClassManager&lt; M_Class &gt; M_Class::gClassManager(\\ \t\t#M_Class,\\ \t\t&M_BaseClass0::gClassManager); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (<i>&#038;M_BaseClass0::gClassManager<\/i>) \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (<i>M_Class::gClassManager<\/i>), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 setParent(&#8230;):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ClassManager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class IClassManager { \t. . . \tvoid setParent(IClassManager *inParent) { \t\t_parents.push_back(inParent); \t\tinParent-&gt;_children.push_back(this); \/\/ &lt;&lt;&lt;--\u2013 \u0412\u041e\u0422 \u042d\u0422\u0410 \u0421\u0422\u0420\u041e\u0427\u041a\u0410! \t} \t. . . }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0423\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u044e ClassManager \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u2026 \u041d\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0451 \u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043d, \u0432\u0435\u0434\u044c \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0440\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432!<\/p>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0438\u043c\u0435\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u043b\u044e \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u042f \u0441\u0435\u043b \u0437\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0434\u0438\u043b\u0435\u043c\u043c\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430 globalRuntime(), \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager <i>\u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c<\/i> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u043d\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0435\u0441\u0451\u0442 <i>\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/i>: \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0441\u0430\u0445. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 gClassManager \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 SomeHellClass, \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0434\u043b\u044f SomeHellClass, \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u00ab\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443\u00bb \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager, \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 CPPRuntime. \u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0448\u0435\u043c, \u00ab\u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044f\u00bb \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <i>virtual IClassManager *getRegistry()<\/i>):<\/p>\n<pre><code class=\"cpp\">\/\/----\u2013 Declaration.h ----- class Base { public: \tstatic ClassManager&lt;Base&gt; *getClassManager( ); };  class Child { public: \tstatic ClassManager&lt;Child&gt; *getClassManager( ); };  class ChildOfChild { public: \tstatic ClassManager&lt;ChildOfChild&gt; *getClassManager( ); }; <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/----\u2013 Declaration.cpp ----- ClassManager&lt;Base&gt; *Base::getClassManager() { \tstatic ClassManager&lt;Base&gt; gClassManager(&quot;Base&quot;); \treturn &gClassManager; }  ClassManager&lt;Child&gt; *Child::getClassManager() { \tstatic ClassManager&lt;Child&gt; gClassManager(&quot;Child&quot;, \t\t\tBase::getClassManager()); \treturn &gClassManager; }  ClassManager&lt;ChildOfChild&gt; *ChildOfChild::getClassManager() { \tstatic ClassManager&lt;ChildOfChild&gt; gClassManager(&quot;ChildOfChild&quot;, \t\t\tChild::getClassManager()); \treturn &gClassManager; } <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0441\u0441\u0430 Child. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a ClassManager \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0412\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">ClassManager&lt;Child&gt; *theManager = Child::getClassManager(); <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 getClassManager() \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">. . . static ClassManager&lt;Child&gt; gClassManager(&quot;Child&quot;, Base::getClassManager()); \/\/ &lt;&lt;---!!! return &gClassManager; . . . <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043e\u0431\u044a\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 Base::getClassManager() \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435\u2026 \u041d\u041e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430! \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 ChildOfChild::getClassManager(). \u0427\u0442\u043e\u0431\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager . . . globalRuntime().registerClass(this); IClassManager::setParent(inParent0); \/\/ &lt;&lt;&lt;--- !!! . . . <\/code><\/pre>\n<p>  \u0412\u043e\u0442. \u0421\u0442\u0440\u043e\u0447\u043a\u0430, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0432\u043e\u0441\u043a\u043b\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u043a\u0430\u043c\u0438. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager <b>\u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430<\/b>. \u0415\u0441\u043b\u0438 getClassManager() \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d, \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 _child \u0434\u043b\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430.<\/p>\n<p>  \u0418 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u2013 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c, \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0432 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0421++, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0431\u0443\u0434\u0435\u0442 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.  <\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <i>\u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b<\/i>, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ClassManager \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f, \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 CPPRuntime.<\/p>\n<p>  <i>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0436\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b<\/i>, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430, \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager. \u0410 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0435 \u043a\u043e\u043b\u043b\u0441\u0442\u0435\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main() \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 dynamic initialization \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043b\u0441\u044f.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0438\u043a\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430: \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043e\u043d\u0438 \u0432\u0441\u0451 \u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438, \u0437\u043d\u0430\u0447\u0438\u0442, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 \u043d\u0435\u043a\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 ClassManager \u043d\u0435 \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d \u2013 \u0430 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ClassManager.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class IClassManager { . . . \tstd::vector&lt; int &gt; _parentsIndexes; \tstd::vector&lt; int &gt; _childIndexes; . . . \tvoid setParent(IClassManager *inParent) { \t\t_parentIndexes.push_back(globalRuntime().indexOf(inParent)); \t\tinParent-&gt;_childIndexes.push_back(globalRuntime().indexOf(this)); \t} . . . }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">CPPRuntime.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class CPPRuntime { . . . \tstd::vector&lt; IClassManager * &gt; _registries; . . . \tint indexOf(IClassManager *inRegistry) { \t\tfor(int theIndex = 0, theSize = _registries.size(); \t\t\t\ttheIndex &lt; theSize; ++theIndex) \t\t\tif (_registries[theIndex] == inRegistry) return theIndex;  \t\t_registries.push_back(inRegistry); \t\treturn _registries.size() \u2013 1; \t} . . . }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0447\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u043b\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043d\u043e \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432).<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0431\u0451\u0440\u0442\u043a\u0443-\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u0434\u043b\u044f gClassManager. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f, \u043f\u043e\u043a\u0430 \u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Macros.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">. . . \/\/ 1 parent #define CPPRT_IMPLEMENTATION_1(M_Class, M_BaseClass0)\\ ClassManager&lt; M_Class &gt; *M_Class::getRegistry() { \tstatic ClassManager&lt; M_Class &gt; gClassManager(#M_Class, \t\t\t&M_BaseClass0:: getRegistry() ); \treturn &gClassManager; } \/\/ \u042d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \/\/ \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ClassManager&lt; M_Class &gt;, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u043b\u0430\u0441\u0441 \/\/ \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d. \u0418\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \/\/ \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c cpp-\u0444\u0430\u0439\u043b\u0435. \/\/ \u042f\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u0435\u0436\u0430\u043b\u0430 \u043c\u0451\u0440\u0442\u0432\u044b\u043c \u0433\u0440\u0443\u0437\u043e\u043c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \/\/ \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041d\u0435 \u043e\u0441\u043e\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u2013 \u043d\u043e \u0433\u0440\u044f\u0437\u043d\u043e, \/\/ \u0433\u0440\u044f\u0437\u043d\u043e \u0432\u0435\u0434\u044c! char __dummy__##M_Class = (char)M_Class::getRegistry(); . . . <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418 \u0443\u0436\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u043e\u043c\u043e\u0433 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043f\u0443\u043d\u043a\u0442\u0430 3.6.2 \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430. \u0412\u043e\u0442 \u0441\u0441\u044b\u043b\u043a\u0438: \u043d\u0430 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043c\u043d\u043e\u044e <a href=\"http:\/\/stackoverflow.com\/questions\/22117310\/c-global-variable-initialization-order\/22117407#22117407\">stackoverflow<\/a>, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u0438 \u043d\u0430 <a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2012\/n3337.pdf\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442<\/a> (\u0443\u0432\u044b, \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u0434\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b \u0432 PDF, \u0441\u0430\u043c\u0438 \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442 3.6.2 \u043f\u043e \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e).<\/p>\n<blockquote><p>Variables with static storage duration (3.7.1) or thread storage duration (3.7.2) shall be zero-initialized (8.5) before any other initialization takes place<\/p><\/blockquote>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e (\u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434):<\/p>\n<pre><code>getPointer() { \t\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430, \u0432\u0435\u0434\u044c \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \t\/\/ \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 zero-value \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \t\/\/ \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0440\u0430\u0432\u043d\u043e\u0435 \u043d\u0443\u043b\u044e \tif (!Class::gPointer) { Class::gPointer = initializeValue(); } \treturn Class::gPointer; } Class::gPointer = getPointer(); <\/code><\/pre>\n<p>  \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0451\u043b \u043f\u043e\u043b\u043d\u0443\u044e \u0440\u0435\u0432\u0438\u0437\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 ClassManager \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u0436\u0438\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 CPPRuntime, \u0430 \u0441\u0430\u043c CPPRuntime \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0440\u044b \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u0432 450 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430.<\/p>\n<p>  <a name=\"final\"><\/a><\/p>\n<h3>6. \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0437\u0434\u0435\u0441\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<br \/>  1. <a href=\"https:\/\/bitbucket.org\/vsemenyakin\/cpprt\">\u0421\u0441\u044b\u043b\u043a\u0430<\/a> \u043d\u0430 \u00ab\u0447\u0435\u0440\u043d\u043e\u0432\u043e\u0439\u00bb \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 bitbucket. \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u043d\u0430 GitHub. \u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f.<br \/>  2. <a href=\"https:\/\/github.com\/vsemenyakin\/cpprt\">\u0421\u0441\u044b\u043b\u043a\u0430<\/a> \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 GitHub \u2014 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 CMake (\u043e \u0447\u0451\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 (\u0421\u0421\u042b\u041b\u041a\u0410!) ).<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0451. \u041d\u0430 \u044d\u0442\u043e\u043c <i>\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/i> \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p>  <i>\u0410\u0432\u0442\u043e\u0440 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0438\u0442\u0440\u044b<\/b><\/p>\n<div class=\"spoiler_text\"><b>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/b> \u0421\u0435\u0440\u0433\u0435\u0439 \u0421\u0435\u043c\u0435\u043d\u044f\u043a\u0438\u043d  <\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/281993\/\"> https:\/\/habrahabr.ru\/post\/281993\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/930\/b5a\/355\/930b5a3557014f3f9a0a707096c72bbc.bmp\"\/><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421++ \u043b\u0438\u0431\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u043b\u0438\u0431\u043e \u0441\u043b\u0430\u0431\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u0432\u043e\u044e \u043c\u0438\u043a\u0440\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0435\u0451 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">C\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0446\u0438\u043a\u043b\u0430<\/b><\/p>\n<div class=\"spoiler_text\">1. \u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443<br \/>  2. \u041f\u0440\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<br \/>  3. \u041f\u0440\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442  <\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-278643","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=278643"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278643\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=278643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=278643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=278643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}