рдмреВрд╕реНрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕

C ++ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрдВрддреНрд░ рдХреА рдХрдореА рд╕реЗ рд╣рдореЗрд╢рд╛ рдбрд░рддрд╛ рдерд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЬрдм рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддрд╛ рд╣реИ

template <class T> bool someFunc(T t) { if (t.someCheck()) { t.someAction(0); } } 

рд╡рд╣ рдЯрд╛рдЗрдк рдЯреА рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рдгрд╛рдПрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрдо рд╕реЗ рдХрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдорд╛рдирддрд╛ рд╣реИ

  1. рдЯрд╛рдЗрдк рдЯреА рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореВрд▓реНрдп рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЦреБрд▓реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╣реИ T: someCheck рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдПрдХ рдЦреБрд▓реА рд╡рд┐рдзрд┐ T :: someAction рд╣реИ , рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╕рдорд╕реНрдпрд╛

рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ someFunc рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореМрдЬреВрджрд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ?
  1. рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рдирд╛ред рдпрджрд┐ рдпрд╣ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, рдХреЛрдИ рднреА рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛ред рджрд┐рд▓ рд╕реЗ рд╕рднреА рд╢рд░реНрддреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА, рд╣рд░ рдХреЛрдИ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред
  2. рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрдиред рдПрдХ рд╢реМрдХрд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рдмрдХред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдбрд╝рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдХрдо рдкреНрд░реЗрдорд┐рдпреЛрдВ

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

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗ)

рдЖрдкрдХреЛ рд╕реВрдЪреА (рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░) рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рднреА рдирд╣реАрдВ, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 std::list<int>theList; std::sort(theList.begin(), theList.end()); 

рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВред VS2013 рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ
рддреНрд░реБрдЯрд┐ C2784: 'рдЕрдЬреНрдЮрд╛рдд-рдкреНрд░рдХрд╛рд░ std :: рдСрдкрд░реЗрдЯрд░ - (std :: Move_iterator <_RanIt> &, const std :: Move_iterator <_RanIt2> &)': 'std :: Move_iterator <_RanIt> &' рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ 'std :: _ List_iterator <std :: _ List_val <std :: _ List_simple_types <int> >>' c: \ program files (x86) \ microsoft рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 12.0 \ vcc рдХреЗ рд╢рд╛рдорд┐рд▓ \ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо 3157 1 MyApp

рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ - рдЬрдм рдЖрдк рдЧрд▓рддреА рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЦреБрдж рдХреЛ рдпрд╣реАрдВ рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ

 template<class _RanIt, class _Pr> inline void sort(_RanIt _First, _RanIt _Last, _Pr _Pred) { // order [_First, _Last), using _Pred _DEBUG_RANGE(_First, _Last); _DEBUG_POINTER(_Pred); _Sort(_Unchecked(_First), _Unchecked(_Last), _Last - _First, _Pred); } 

рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: тАЬрдХреНрдпрд╛! рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХреНрдпреЛрдВ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдореЗрдВ рдЕрдЪрд╛рдирдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖ - рджреЛрдиреЛрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рджреЛрдиреЛрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред "рдареАрдХ рд╣реИ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдареАрдХ рд╣реИ - рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкреАрдЯрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдЬреАрд╡рдирджрд╛рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдП рдЧрдП, рди рдХрд┐ рдЗрддрдирд╛ рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп ...

рдирд┐рд░реНрдгрдп

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

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

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

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

 #include <boost/concept_check.hpp> template <class T> struct SomeFuncAppropriate { public: BOOST_CONCEPT_ASSERT((boost::CopyConstructible<T>)); BOOST_CONCEPT_USAGE(SomeFuncAppropriate) { bool b = t.someCheck();//  someCheck,   ,   bool t.someAction(0);//  someAction  ,    } private: T t; // must be data members }; 

рддреЛ, рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рддреИрдпрд╛рд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдореИрдХреНрд░реЛ BOOST_CONCEPT_ASSERT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ - рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрд╖реНрдардХ рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЖрдВрдЦ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рддреЗ рд╣реИрдВред

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

рдЬрдм рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрд╕реА рдореИрдХреНрд░реЛ BOOST_CONCEPT_ASSERT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ

 class SomeClass { public: SomeClass(); void someCheck(); int someAction(int); private: SomeClass(const SomeClass& other); }; 

рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 BOOST_CONCEPT_ASSERT((SomeFuncAppropriate<SomeClass>)); 

рд╣рдо рджреМрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рддреБрд░рдВрдд рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ
C2440 рддреНрд░реБрдЯрд┐: 'рдЖрд░рдВрднреАрдХрд░рдг': 'рд╢реВрдиреНрдп' рд╕реЗ 'рдмреВрд▓' рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛

рдФрд░ рдЬрдм рдЖрдк рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо SomeFuncApp рдЙрдкрдпреБрдХреНрдд рдЕрд╡рдзрд╛рд░рдгрд╛ (BOOST_CONCEPT_USAGE рдореЗрдВ) рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдкрд░ рдлреЗрдВрдХ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ - someCun рд╡рд┐рдзрд┐ рдмреВрд▓ рдХреЗ рдмрдЬрд╛рдп рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИред рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ...
C2248 рддреНрд░реБрдЯрд┐: 'SomeClass :: SomeClass': рдХрдХреНрд╖рд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд┐рдЬреА рд╕рджрд╕реНрдп рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ 'SomeClass' boost \ concept_check.hpp

рддреНрд░реБрдЯрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдо рдЦреБрдж рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ

  BOOST_concept(CopyConstructible,(TT)) { BOOST_CONCEPT_USAGE(CopyConstructible) { TT a(b); // require copy constructor TT* ptr = &a; // require address of operator const_constraints(a); ignore_unused_variable_warning(ptr); } ... 

рдФрд░ рдХрд░реНрд╕рд░ рд▓рд╛рдЗрди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ

  TT a(b); // require copy constructor 

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

рдЪрд▓рд┐рдП рд╡рд╛рдкрд╕ std :: list Sorting рдЙрджрд╛рд╣рд░рдг рдкрд░ std :: рд╕реЙрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЙрд░реНрдЯреЗрдмрд▓ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрд╕рдЯреАрдбреА :: рд╕реЙрд░реНрдЯ рдХреЗрд╡рд▓ рдЙрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдВрдЪ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ ( рдмрдврд╝рд╛рд╡рд╛ :: randomAccessContainer ) рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдХрдВрдЯреЗрдирд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рд╣реИ - рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП "рдХрдоред" рдпрд╣рд╛рдБ рдмрдврд╝рд╛рд╡рд╛ рдлрд┐рд░ рд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ :: LessThanComparable ред
рд╣рдо рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

 template <class T> struct Sortable { public: typedef typename std::iterator_traits<typename T::iterator>::value_type content_type; BOOST_CONCEPT_ASSERT((boost::RandomAccessContainer<T>)); BOOST_CONCEPT_ASSERT((boost::LessThanComparable<content_type>)); }; 

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

 BOOST_CONCEPT_ASSERT((Sortable<std::list<int> >)); 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ
рддреНрд░реБрдЯрд┐ C2676: рдмрд╛рдЗрдирд░реА '[': 'const std :: list <int, std :: рдПрд▓реЛрдХреЗрдЯрд░ <_Ty >>' рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░ рдмреВрд╕реНрдЯ \ concept_check.hpp рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг

рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рд░реИрдВрдбрдордЕрд╕рд╛рдЙрдВрдЯрд░рдХреЙрдиреНрд╕реЗрдЯрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк std :: std :: рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ рдорд┐рд▓реЗрдЧреАред рдЕрдм SomeClass рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕реЙрд░реНрдЯ рд╡реЗрдХреНрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
 BOOST_CONCEPT_ASSERT((Sortable<std::vector<SomeClass> >)); 

рдХрдВрдЯреЗрдирд░ рдЕрдм рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЕрднреА рднреА рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ SomeClass рдХрдо-рд╕реЗ-рдХрдо рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рдЬрд╛рдПрдВрдЧреЗ
C2676 рддреНрд░реБрдЯрд┐: рдмрд╛рдЗрдирд░реА '<': 'SomeClass' рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ \ _ \ _

рддреНрд░реБрдЯрд┐ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ - рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб LessThanComparable рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрдпрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ C ++ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдЪрд░рдо рдмрдирд╛рддреА рд╣реИрдВред рдЦреБрд╢реА рдХреЗ рд╕рд┐рд╡рд╛ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛!

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


All Articles