是否可以定义用户定义的字符串文字转换运算符,使其结果的类型取决于其字符串输入的值?
使用用户定义的整数和浮点文字很容易,因为它们允许文字运算符模板,并且文字的实际字符作为模板参数传递给它。例如:
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");
对于用户定义的字符串文字,似乎不存在这样的事情。
是否有其他方法可以做到这一点,无论是在现行标准中,还是计划/讨论过的未来修订?
答案 0 :(得分:1)
不,不可能,除了严重的宏观hackery之外。字符串文字通过constexpr
访问,返回类型constexpr
不能依赖于参数值。
针对字符串文字的建议<char...>
operator""
遇到了“原始或已处理”问题以及如何指定问题,以及由于下一个标准及时删除这些问题而导致丢弃的问题很难,和/或投资回报率很低。 (至少从我随意阅读发生的事情开始)。
我不知道它是否在葡萄藤上死亡,或者仍在继续工作。
hackery将手动传递<arr[0], arr[1], arr[2]>
到template
pseduo,而不会(直接)涉及用户定义的文字语法。它有很多问题。