рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп рдкрд╛рдардХ!
рдпрд╣ рд▓реЗрдЦ рдЕрдореВрд░реНрдд рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдХрдиреЗ рд╡рд╛рд▓реА рдкреБрд╕реНрддрдХ, рдкреНрд░рднрд╛рд╡реА рдФрд░ рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝реВрдВрдЧрд╛ред рдЗрди рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ github.com рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЖрдЬ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ рдХреЗ рдЬреАрд╡рдВрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдЖрд▓реЗрдЦ рдкрд┐рдЫрд▓реЗ рдЖрд▓реЗрдЦ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд╛рд╕рди рдирд┐рдпрдореЛрдВ рдХреЛ рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред
рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖
C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдШреЛрд╖рд┐рдд рдРрд░реЗ рд╣рдореЗрд╢рд╛, рдЬрдм рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛рд░реНрдп:
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдХреЛрдб рджреВрдВрдЧрд╛, рдЬреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ:
template<typename T> void paramDeductInfo(T param, const char *initType) { std::cout << initType << " -> (T param) -> " << type_id_with_cvr<T>().pretty_name() << std::endl; }; template<typename T> void refParamDeductInfo(T ¶m, const char *initType) { std::cout << initType << " -> (T ¶m) -> " << type_id_with_cvr<T>().pretty_name() << std::endl; };
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░:
cli::printCaption("TYPE DEDUCTION FOR ARRAY OF CHAR"); char charSeq[] = "Hi everyone!"; paramDeductInfo(charSeq, "char []"); refParamDeductInfo(charSeq, "char []"); cli::printCaption("TYPE DEDUCTION FOR ARRAY OF INT"); int intSeq[] = {1, 2, 3}; paramDeductInfo(intSeq, "int []"); refParamDeductInfo(intSeq, "int []"); cli::printCaption("TYPE DEDUCTION FOR ARRAY OF CLASS A"); class A { } const classASeq[] = {A(), A(), A()}; paramDeductInfo(classASeq, "class A[]"); refParamDeductInfo(classASeq, "class A[]");
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрджреНрдо рдХреЛрдб рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
************************************************************************************************************************ TYPE DEDUCTION FOR ARRAY OF CHAR ************************************************************************************************************************ char [] -> (T param) -> char* char [] -> (T ¶m) -> char [13] ************************************************************************************************************************ TYPE DEDUCTION FOR ARRAY OF INT ************************************************************************************************************************ int [] -> (T param) -> int* int [] -> (T ¶m) -> int [3] ************************************************************************************************************************ TYPE DEDUCTION FOR ARRAY OF CLASS A ************************************************************************************************************************ class A[] -> (T param) -> main::A const* class A[] -> (T ¶m) -> main::A const [3]
рдЙрджрд╛рд╣рд░рдг 1 - рд╕рдВрдХрд▓рди-рд╕рдордп рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рдгреА рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдпрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд┐рдВрдЯрдХреИрдкрд┐рдпрди рдлрдВрдХреНрд╢рди рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЗрдбрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реИред
namespace cli { template<typename T, std::size_t N> constexpr void printCaption(T (&capValue)[N]) { static_assert(N <= 121, "caption length should be less than 120"); std::cout << std::endl << "*******************************************************************************" << std::endl << capValue << std::endl << "*******************************************************************************" << std::endl << std::endl; }; }
рдЕрдЧрд░ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдЪрд┐рдд рд╣реЗрдбрд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред
cli::printCaption("123456789 123456789 123456789 123456789 123456789 123456789 123456789" "123456789 123456789 123456789 123456789 123456789 !");
рдФрд░ рдпрд╣рд╛рдБ рдЖрдк рдХреГрдкрдпрд╛, рдареАрдХ рд╣реИ, рдпрд╣ рдЕрджреНрднреБрдд рдирд╣реАрдВ рд╣реИ?
/...sources/cli.h:12:3: error: static assertion failed: caption length should be less than 120 static_assert(N <= 121, "caption length should be less than 120"); ^~~~~~~~~~~~~
рдЙрджрд╛рд╣рд░рдг 2 - рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдкрд░ foreach
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдЖрдХрд╛рд░ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рд╕рд░рдгреА рдкрд░ рд▓реВрдк рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
template<typename T, size_t N, typename F> void forEachOnAnArray(T (&inmemArray)[N], F &callback) { for (int i = 0; i < N; ++i) callback(inmemArray[i]); };
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
auto printInt = [](int value) { std::cout << " " << value; }; forEachOnAnArray(intSeq, printInt);
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред
рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди
рдореЗрдпрд░реНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреА рдмрд╛рдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдпрдж рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд░реИрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдереА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрд╢рд▓ рдФрд░ рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдХреЗ рд╕рд╡рд╛рд▓ рд╕реЗ рдкрд░реЗ рд╣реИред
рд╣рдо, рдореЗрд░реЗ рдкреНрд░рд┐рдп рдкрд╛рдардХ, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрд╡рд╢реНрдп рд▓реМрдЯреЗрдВрдЧреЗ!
рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ !!