17 template<
class... args_t>
18 concept log_acceptable_args_c = (
sizeof...(args_t) > 0 && format_acceptable_args_c<char_type, args_t...>);
23 template<
size_t nStringsPoolSize>
24 inline string_pool<nStringsPoolSize>::item format_macro_user_message(string_pool<nStringsPoolSize>* pStringsPool)
26 return { QXT(
""), string_pool<nStringsPoolSize>::nFreeString };
29 template<
size_t nStringsPoolSize>
30 inline string_pool<nStringsPoolSize>::item format_macro_user_message(
31 string_pool<nStringsPoolSize>* pStringsPool,
32 const char* pszUserMessage)
34 typename string_pool<nStringsPoolSize>::item message =
36 ? pStringsPool->acquire()
37 :
typename string_pool<nStringsPoolSize>::item { string(), string_pool<nStringsPoolSize>::nFreeString };
39 to_string(message.sValue, pszUserMessage);
43 template<
size_t nStringsPoolSize>
44 inline string_pool<nStringsPoolSize>::item format_macro_user_message(
45 string_pool<nStringsPoolSize>* pStringsPool,
48 return { std::move(sUserMessage), string_pool<nStringsPoolSize>::nFreeString };
52 template<
size_t nStringsPoolSize,
size_t nStringLiteralSize>
53 string_pool<nStringsPoolSize>::item format_macro_user_message(
54 string_pool<nStringsPoolSize>* pStringsPool,
55 const char_type (&)[nStringLiteralSize]) =
delete;
58 template<
size_t nStringsPoolSize,
class first_arg_t,
class... rest_args_t>
59 requires(log_acceptable_args_c<first_arg_t, rest_args_t...>)
60 string_pool<nStringsPoolSize>::item format_macro_user_message(
61 string_pool<nStringsPoolSize>* pStringsPool,
62 const format_string_strong_checks<first_arg_t, rest_args_t...> sFormat,
63 first_arg_t&& firstArg,
64 rest_args_t&&... restArgs)
66 typename string_pool<nStringsPoolSize>::item message =
68 ? pStringsPool->acquire()
69 :
typename string_pool<nStringsPoolSize>::item { string(), string_pool<nStringsPoolSize>::nFreeString };
71 message.sValue.
format(sFormat, std::forward<first_arg_t>(firstArg), std::forward<rest_args_t>(restArgs)...);
80 #define _QX_MACRO_USER_MESSAGE_0()
81 #define _QX_MACRO_USER_MESSAGE_1(a1) a1
82 #define _QX_MACRO_USER_MESSAGE_2(a1, a2) QXT(a1), a2
83 #define _QX_MACRO_USER_MESSAGE_3(a1, a2, a3) QXT(a1), a2, a3
84 #define _QX_MACRO_USER_MESSAGE_4(a1, a2, a3, a4) QXT(a1), a2, a3, a4
85 #define _QX_MACRO_USER_MESSAGE_5(a1, a2, a3, a4, a5) QXT(a1), a2, a3, a4, a5
86 #define _QX_MACRO_USER_MESSAGE_6(a1, a2, a3, a4, a5, a6) QXT(a1), a2, a3, a4, a5, a6
87 #define _QX_MACRO_USER_MESSAGE_7(a1, a2, a3, a4, a5, a6, a7) QXT(a1), a2, a3, a4, a5, a6, a7
88 #define _QX_MACRO_USER_MESSAGE_8(a1, a2, a3, a4, a5, a6, a7, a8) QXT(a1), a2, a3, a4, a5, a6, a7, a8
89 #define _QX_MACRO_USER_MESSAGE_9(a1, a2, a3, a4, a5, a6, a7, a8, a9) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9
90 #define _QX_MACRO_USER_MESSAGE_10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10
91 #define _QX_MACRO_USER_MESSAGE_11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11
92 #define _QX_MACRO_USER_MESSAGE_12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12
93 #define _QX_MACRO_USER_MESSAGE_13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13
94 #define _QX_MACRO_USER_MESSAGE_14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14
95 #define _QX_MACRO_USER_MESSAGE_15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15
96 #define _QX_MACRO_USER_MESSAGE_16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16
97 #define _QX_MACRO_USER_MESSAGE_17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17
98 #define _QX_MACRO_USER_MESSAGE_18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18
99 #define _QX_MACRO_USER_MESSAGE_19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19
100 #define _QX_MACRO_USER_MESSAGE_20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20
101 #define _QX_MACRO_USER_MESSAGE_21(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21
102 #define _QX_MACRO_USER_MESSAGE_22(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22
103 #define _QX_MACRO_USER_MESSAGE_23(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23
104 #define _QX_MACRO_USER_MESSAGE_24(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24
105 #define _QX_MACRO_USER_MESSAGE_25(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25
106 #define _QX_MACRO_USER_MESSAGE_26(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26
107 #define _QX_MACRO_USER_MESSAGE_27(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27
108 #define _QX_MACRO_USER_MESSAGE_28(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28
109 #define _QX_MACRO_USER_MESSAGE_29(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29
110 #define _QX_MACRO_USER_MESSAGE_30(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30
111 #define _QX_MACRO_USER_MESSAGE_31(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31
112 #define _QX_MACRO_USER_MESSAGE_32(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32
115 #define _QX_MACRO_USER_MESSAGE(stringsPool, ...) \
116 qx::details::format_macro_user_message(stringsPool __VA_OPT__(, ) QX_EXPAND( \
117 QX_APPEND_VA_ARG_COUNT(_QX_MACRO_USER_MESSAGE_, __VA_ARGS__)(__VA_ARGS__)))
requires format_acceptable_args_c< char_t, args_t... > void format(const format_string_type< std::type_identity_t< args_t >... > sFormat, args_t &&... args)
Clear the string and format it with the format string and the args.
requires(same_variadic_args_v< args_t... >) const expr auto coalesce(args_t &&... args)
Coalesce function, C# a ?? b analogue.
void to_string(string &out, cstring_view stringView, const std::locale &locale=std::locale())
Convert a char string to common string type.