是否可以定义用户定义的字符串文字转换运算符,以使其结果的类型取决于其字符串输入的值?
用户定义的整数和浮点文字很容易,因为它们接受文字运算符模板,并且文字的实际字符作为模板参数传递给它。例:
template <char... s> struct silly { using type = int; };
template <char... s> struct silly<'1', s...> { using type = double; };
template <char... s>
typename silly<s...>::type operator"" _silly() { return 0; }
static_assert(std::is_same<int, decltype(4321_silly)>::value, "no luck");
static_assert(std::is_same<double, decltype(1234_silly)>::value, "no luck");
用户定义的字符串文字似乎不存在这种情况。
在当前的标准中,或者在将来的修订中计划或讨论的,是否还有另一种方式可以做到这一点?
不,不可能,除了严重的宏观黑客之外。字符串文字可通过访问constexpr
,并且返回类型constexpr
不能取决于参数的值。
提议<char...>
operator""
的字符串文字遇到了“原始或已处理”问题以及如何指定的问题,并被删除,因为很难及时为下一个标准散列这些问题,和/或投资回报率很低。(至少从我对所发生情况的随意阅读中)。
我不知道它是否死在葡萄树上,或仍在加工。
黑客将手动传递<arr[0], arr[1], arr[2]>
给template
pseduo,并且不会(直接)涉及用户定义的文字语法。它有很多问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句