рд╕рдореНрдореЗрд▓рди рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж,
GoingNative 2012 рдиреЗ C ++ 11-рд╢реИрд▓реА рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ,
рдЕрдХреНрд╕рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмреБрд░рд╛ рд╣реИ, рдЕрдЧрд░ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИред
рдЦрд░рд╛рдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА
void increase_speed(double); Rectangle(int,int,int,int);
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрдХреБрдЫ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдХреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЧрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ? рдЧрддрд┐ рд╡реГрджреНрдзрд┐ рдХреЛ рдХрд┐рд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ?
4 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрдд ctor рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╣реИред рдХреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдпрдд рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЪреМрдбрд╝рд╛рдИ рдпрд╛ рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХрд╛ x- рд╕рдордиреНрд╡рдп рд╣реИ? рдЦреИрд░, рдЖрджрд┐ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рдЯрд╛рдЗрдкреНрд╕ рдпрд╛ рдЯрд╛рдЗрдкреЗрдбрд┐рдлреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо increase_speed рдирд╣реАрдВ рд▓рд┐рдЦ рдкрд╛рдПрдВрдЧреЗ, рдЬреЛ рдХрд┐ m / s рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ increase_speed рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ рдХрд┐рдореА / рдШрдВрдЯрд╛ рд▓реЗрддрд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдмрдврд╝реЗрдЧрд╛_рд╕реНрдкреАрдб (рдбрдмрд▓)ред
рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк
void increase_speed(Speed);
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдЗрдпреЛрдВ рдФрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред рдЖрдЗрдП
рдПрд╕рдЖрдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдмрдЪрдд рдЬрд╛рдирдХрд╛рд░реА
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдк (рдореАрдЯрд░, рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо, рд╕реЗрдХрдВрдб) рдХреА рд╕рдВрдЧрдд рдмреБрдирд┐рдпрд╛рджреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЧреНрд░реА рд╣реЛрдЧреАред
template<int M, int K, int S> class Unit {
рдРрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
template<typename Unit> struct Value { double val;
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
Acceleration acc1 = Value<Unit<1, 0, -2> >(2);
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдореВрд▓реНрдп рд╡рд░реНрдЧ рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдиреА рдЬрдм рддрдХ рд╣рдо рд╕реЗрдХрдВрдб рд╕реЗ рдореАрдЯрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдбрд┐рд╡реАрдЬрди рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдпреВрдирд┐рдЯ рдбрд┐рд╡реАрдЬрди рдСрдкрд░реЗрдЯрд░
template<class Value1, class Value2> auto operator/(Value1 v1, Value2 v2) -> Value<Unit<Value1::m() - Value2::m(), Value1::kg() - Value2::kg(), Value1::s() - Value2::s()> > { return Value<Unit<Value1::m() - Value2::m(), Value1::kg() - Value2::kg(), Value1::s() - Value2::s()> >(v1.val / v2.val);
рдЕрдм рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╛рдиреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Acceleration acc = Value<M>(100) / Value<S>(10) / Value<S>(1);
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд╛рдБрдЪ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрд░рд┐ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рднреА рдЬрд╛рдБрдЪ рд╕рдВрдХрд▓рди рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЧрддрд┐ рдХреЛ рдХрд┐рдореА / рдШрдВрдЯрд╛ рд╕реЗ рдПрдо / рдПрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
Speed convertSpeed(KmPerHour val);
, рдЬрд╣рд╛рдВ KmPerHour рд╡рд░реНрдЧ, рдкреНрд░рд╛рдердорд┐рдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдХрдиреНрд╡рд░реНрдЯрд╕реНрдкреАрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рдЕрдиреВрдареЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╕рдВрдЪрд╛рд▓рди (ConvertSpeed тАЛтАЛ(KmPerHour) рдФрд░ ConvertSpeed тАЛтАЛ(KmPerSec) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рдХреЛрдб рдХреЛ gcc 4.6.3 рдкрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдкреБрдирд╢реНрдЪ: рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рд╕рдВрд╕реНрдХрд░рдг 4.7 рд╕реЗ gcc рдореЗрдВ), рдЬреЛ рдирд┐рдореНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛:
Speed sp =100m/20s;
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЕрджреНрдпрддрди: рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рд╕рдВрджреЗрд╢ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╣реЛрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЬрд╛рдВрдЪреЗрдВред