рдирдорд╕реНрддреЗ! рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдЬрд╛рджреВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рд╢реМрдХ C ++ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рднрд╛рд╖рд╛ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╕реАрдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдмрд╕ рдордЬрд╝реЗ рдХрд░рдирд╛ред рдСрдкрд░реЗрдЯрд░ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди, рдЬреЗрдПрд╕ред рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ C ++ рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдП, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
std::unordered_map<std::string, std::string> some_map = { { "black", "white" }, { "cat", "dog" }, { "day", "night" } }; if (auto res = "cat" in some_map) { res->second = "fish"; }
рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╡рд╣ рдмрд╛рдИрдВ рд╡рд╕реНрддреБ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджрд╛рдИрдВ рдУрд░ рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ рдЗрд╕ рд╡рд╕реНрддреБ рдХреА рдШрдЯрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреЛрдИ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдУрд╡рд░рд▓реЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред
bool operator_in(const string& key, const unordered_map<string, string>& data) { return data.find(key) != data.end(); }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдкреНрд░рдЬрд╛рддрд┐рдпреЛрдВ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред
"some string" in some_map
рдЗрд╕реЗ рдПрдХ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
operator_in("some string", some_map)
рдСрдкрд░реЗрдЯрд░ рдХреА рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдСрдкрд░реЗрдЯрд░ рдЦреБрдж рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ рдЬреЛ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИред
#define in *OP_IN_HELP{}*
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
OP_IN_HELP рдПрдХ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╣реА рдЕрдзрд┐рднрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
class OP_IN_HELP {}; template<class TIn> OP_IN_LVAL<TIn> operator*(const TIn& data, const OP_IN_HELP&) { return OP_IN_LVAL<TIn>(data); }
рдСрдкрд░реЗрдЯрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛ рдЦреЛрдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд▓рд╛рд╕
OP_IN_LVAL рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рдмрд╛рдИрдВ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдЧрд╛ред
template<class TIn> struct OP_IN_LVAL { const TIn& m_in; OP_IN_LVAL(const TIn& val) : m_in(val) {}; };
рдЪреВрдВрдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЪрд▓ рд░рд╣реА рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рд╕реНрд╡рдпрдВ рдЬреАрд╡рд┐рдд рд╣реЛрдЧреА, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд╡рд╕реНрддреБ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрджрд░реНрдн рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ, рд╡рд╣ рдЧреБрдгрд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдУрд╡рд░рд▓реЛрдб рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реЛрдЧрд╛ред
template<class TIn> struct OP_IN_LVAL { const TIn& m_in; OP_IN_LVAL(const TIn& val) : m_in(val) {}; template<class TWhat> bool operator*(const TWhat& what) const { return operator_in(m_in, what); } };
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред
if (auto res = "true" in some_map) { res->second = "false"; }
рд╣рдореЗрдВ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдУрд╡рд░рд▓реЛрдбреЗрдб рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЛ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рдПрдХ C ++ 14 рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ C ++ 11 рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
template<class TIn> struct OP_IN_LVAL { const TIn& m_in; OP_IN_LVAL(const TIn& val) :m_in(val) {};
рдЪреВрдВрдХрд┐ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2013 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рд╕реА ++ 11 рдХреЗ рдврд╛рдВрдЪреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реВрдВ рдФрд░ рд╕реА ++ 11 рдХреЗ рднреАрддрд░ рд╕рдорд╛рдзрд╛рди рд╕реА ++ 14 рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреБрдирдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
Unordered_map рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
template<class TIterator> class OpInResult { bool m_result; TIterator m_iter; public: OpInResult(bool result, TIterator& iter) : m_result(result), m_iter(iter) {} operator bool() { return m_result; } TIterator& operator->() { return m_iter; } TIterator& data() { return m_iter; } }; template<class TKey, class TVal> auto operator_in(const TKey& key, std::unordered_map<TKey, TVal>& data) -> OpInResult<typename std::unordered_map<TKey, TVal>::iterator> { auto iter = data.find(key); return OpInResult<typename std::unordered_map<TKey, TVal>::iterator>(iter != data.end(), iter); } template<class TKey, class TVal> auto operator_in(const char* key, std::unordered_map<TKey, TVal>& data) -> OpInResult<typename std::unordered_map<TKey, TVal>::iterator> { auto iter = data.find(key); return OpInResult<typename std::unordered_map<TKey, TVal>::iterator>(iter != data.end(), iter); }
OpInResult рд╡рд░реНрдЧ
рдЖрдкрдХреЛ рдХрд╛рд╕реНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддреАрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦреМрдЯрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ unordered_map.find () рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
cpp.sh/7rfdwрдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЧрд╣ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ
рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдУрд╡рд░рд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди
OP_IN_LVAL рд╢реНрд░реЗрдгреА рдХреА
рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ рдЬреАрд╕реАрд╕реА рдШреЛрд╖рдгрд╛ рд╕реНрдерд╛рди рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рддрддреНрдХрд╛рд▓ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (рдЬрдм рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
рдУрдкреА_рдЖрдИрдПрдирд╡реАрд╡реАрдПрдПрд▓ рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рдмрдпрд╛рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
cpp ред
рд╕реА ++ 17 рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
if (auto res = some_map.find("true"); res != some_map.end()) { res->second = "false"; }
рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рджреГрд╢реНрдп рдХрд╛ рдбрд┐рдЬрд╛рдЗрди рд▓рдЧрддрд╛ рд╣реИ
if (auto res = "true" in some_map) { res->second = "false"; }
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдУрд╡рд░рд▓реЛрдб рдХреЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
github.com/ChaosOptima/operator_inрдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА
рдФрд░ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
negative = FROM some_vector WHERE [](int x){return x < 0;};
рдкреБрдирд╢реНрдЪрдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдЕрд╢рдХреНрдд-рд╕рдВрдЪрд╛рд▓рдХ
auto result = $if some_ptr $->func1()$->func2()$->func3(10, 11, 0)$endif;
рдкреИрдЯрд░рди рдорд┐рд▓рд╛рди
succes = patern_match val with_type(int x) { cout << "some int " << x << '\n'; } with_cast(const std::vector<int>& items) { for (auto&& val : items) std::cout << val << ' '; std::cout << '\n'; } with(std::string()) [&](const std::string&) { cout << "empty string\n"; } with(oneof<std::string>("one", "two", "three")) [&](const std::string& value) { cout << value << "\n"; } with_cast(const std::string& str) { cout << "some str " << str << '\n'; } at_default { cout << "no match"; };
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо
StringEnum Power $def ( POW0, POW1, POW2 = POW1 * 2, POW3, POW4 = POW3 + 1, POW8 = POW4 * 2, POW9, POW10 ); to_string(Power::POW0) from_string<Power>("POW0")