具有依赖类型的字符串文字 - 不可能?

n. *_* m. 15 c++ user-defined-literals c++11

是否可以定义用户定义的字符串文字转换运算符,使其结果的类型取决于其字符串输入的值?

用户定义的整数和浮点文字很容易,因为它们允许文字运算符模板,文字的实际字符作为模板参数传递给它.例:

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");
Run Code Online (Sandbox Code Playgroud)

用户定义的字符串文字似乎不存在这样的事情.

是否有另一种方法可以做到这一点,无论是在现行标准中,还是计划/讨论过的未来版本?

Yak*_*ont 1

不,除了严重的宏观黑客攻击之外,这是不可能的。字符串文字通过 访问constexpr,并且 的返回类型constexpr不能依赖于参数的值。

字符串文字的提议<char...> operator""遇到了“原始或已处理”问题以及如何指定它的问题,以及在哪里被删除的问题,因为及时解决下一个标准的这些问题将是困难的,并且/或投资回报率会很低。(至少从我随意阅读所发生的事情来看)。

我不知道它是死在藤蔓上,还是仍在开发中。

黑客行为将手动传递<arr[0], arr[1], arr[2]>template伪指令,并且不会(直接)涉及用户定义的文字语法。它有很多问题。