рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрд░рдВрднреАрдХрд░рдг рд╕реВрдЪреА рдХрд╛ рдордирдорд╛рдирд╛ рдХреНрд░рдо

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рд╣реИ



struct deferred; struct deadline; struct disable; template<class T, class Deferred = disable, class Deadline = disable> struct some_container
      
      





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



 typedef some_container<int, disable, deadline> deadline_container; <source>    <source lang=cpp> typedef some_container<int, deadline> deadline_container;
      
      





рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдХреНрд░рдо рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рджреЛ рдмрд░рд╛рдмрд░ рд╣реИрдВ



 typedef some_container<int, deferred, deadline> full_container1; typedef some_container<int, deadline, deferred> full_container1;
      
      





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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рдд рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╡ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рддреЛ рд╣рд╛рдБ, рдпрджрд┐ 3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ 4, 5 рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд▓рд┐рдЦрдирд╛ рдЧрд╛рдпрдм рд╣реИред рдФрд░ рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдирдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдореЗрдВ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрдЯреМрддреА рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП



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



 typedef some_container<int, disable, deadline_super>
      
      





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

рдкреВрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди mpl :: set рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрдврд╝рд╛рд╡рд╛ рдШрдЯрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреНрдпрд╛рджрд╛ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ :: mpl рдХреНрдпрд╛ рд╣реИ , рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ mpl :: рд╕реЗрдЯ рдЖрдкрдХреЛ std рдХреЗ рд╕рдорд╛рди рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ :: рд╕реЗрдЯ рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рдЪрд░рдг рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ред

рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡реЛ рд╣реИ рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рд╕реНрдЯ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдПрдХ рдЬрд╝рд░реБрд░рдд рдЬрд┐рд╕реЗ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдбрд┐рдлреЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ (рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдбрд┐рд╕реЗрдмрд▓) рд╡рд╛рдкрд╕ рдХрд░реЗрдВ



 template <class Plugin, class IsSet> struct get_plugin_impl; template <class Plugin> struct get_plugin_impl<Plugin, boost::mpl::false_> { typedef disable_plugin type; }; template <class Plugin> struct get_plugin_impl<Plugin, boost::mpl::true_> { typedef Plugin type; }; template <class List, class Plugin> struct get_plugin { typedef typename get_plugin_impl<Plugin, typename boost::mpl::has_key<List, Plugin>::type>::type type; };
      
      





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

рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдВрддрд┐рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ



 template <class List> struct get_plugins { typedef typename get_plugin<List, deferred_plugin>::type deferred; typedef typename get_plugin<List, deadline_plugin>::type deadline; };
      
      





рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬреЛ рдирдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдХреЛрдИ 2 ^ n рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдВрддрд┐рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рдд рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ



 template<class T, class P1 = disable_plugin, class P2 = disable_plugin> struct container { typedef boost::mpl::set<P1, P2> plugin_list; typedef get_plugins<plugin_list> plugs; typedef typename plugs::deferred deferred; typedef typename plugs::deadline deadline; typedef some_container<T, deferred, deadline> type; };
      
      





рдЕрд░реНрдерд╛рддреН, рдпрд╣ рд╣рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХреНрд░рдо рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЙрди рд╕рднреА (2 ^ n + K) рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреЗ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред



рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░ рд▓реМрдЯрдХрд░, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



 #define static_type(name) \ static const std::string& type() \ { \ static std::string type_(name); \ return type_; \ } \ struct deferred_plugin { static_type("deferred"); }; struct deadline_plugin { static_type("deadline"); }; struct disable_plugin { static_type("disable"); }; template<class T, class Deferred, class Deadline> struct some_container { static const std::string& type() { static std::string type_("some_container<" + Deferred::type() + ", " + Deadline::type() + ">"); return type_; } };
      
      





рдХреЗ рдЙрдкрдпреЛрдЧ



  cout << container<int>::type::type() << std::endl; cout << container<int, deadline_plugin>::type::type() << std::endl; cout << container<int, deferred_plugin>::type::type() << std::endl; cout << container<int, deferred_plugin, deadline_plugin>::type::type() << std::endl; cout << container<int, deadline_plugin, deferred_plugin>::type::type() << std::endl;
      
      





рдирд┐рдХрд╛рд╕



some_container <рдЕрдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдХреНрд╖рдо рдХрд░реЗрдВ>

some_container <рдЕрдХреНрд╖рдо, рд╕рдордп рд╕реАрдорд╛>

some_container <рдЖрд╕реНрдердЧрд┐рдд, рдЕрдХреНрд╖рдо>

some_container <рд╕реНрдердЧрд┐рдд, рд╕рдордп рд╕реАрдорд╛>

some_container <рд╕реНрдердЧрд┐рдд, рд╕рдордп рд╕реАрдорд╛>



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рдХреНрд░рдо рдХреЛ рд╕рд╣реА рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред



рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдФрд░ рд╕рдЯреАрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рд╕реНрд░реЛрдд: git



All Articles