【问题标题】:String literal with dependent type — impossible?具有依赖类型的字符串文字——不可能?
【发布时间】:2014-07-22 09:49:42
【问题描述】:

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

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

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");

用户定义的字符串文字似乎不存在这样的东西。

是否有其他方法可以做到这一点,无论是在当前标准中还是计划/讨论的未来修订版?

【问题讨论】:

  • 我不知道这个模板参数的事情。而且超级酷。
  • 抱歉,除非我们得到&lt;char...&gt; UDL 操作符用于字符串文字:(
  • 很多新标准似乎不完整且不正交。 叹息。也许它会在另一个 5-10 年内修复。我想这比根本不发货的标准要好。
  • 这真的感觉像是委员会的疏忽。 unicode 字符串文字可以转换为template&lt;char{16,32}_t...&gt;,对于宽字符串可以转换为wchar_t
  • 我们将它添加到 g++ 中,认为它会变成 C++14。叹。它不是标准的,但它在 g++-4.8 及更高版本上使用 -std=c++14 编译。

标签: c++ c++11 user-defined-literals


【解决方案1】:

不,不可能,除非是严重的宏骇客。字符串文字通过constexpr 访问,constexpr 的返回类型不能依赖于参数的值。

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

我不知道它是死在葡萄藤上,还是仍在进行中。

黑客将&lt;arr[0], arr[1], arr[2]&gt; 传递给template pseduo-manually,并且不会(直接)涉及用户定义的文字语法。它有很多问题。

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多