【发布时间】: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");
用户定义的字符串文字似乎不存在这样的东西。
是否有其他方法可以做到这一点,无论是在当前标准中还是计划/讨论的未来修订版?
【问题讨论】:
-
我不知道这个模板参数的事情。而且超级酷。
-
抱歉,除非我们得到
<char...>UDL 操作符用于字符串文字:( -
很多新标准似乎不完整且不正交。 叹息。也许它会在另一个 5-10 年内修复。我想这比根本不发货的标准要好。
-
这真的感觉像是委员会的疏忽。 unicode 字符串文字可以转换为
template<char{16,32}_t...>,对于宽字符串可以转换为wchar_t -
我们将它添加到 g++ 中,认为它会变成 C++14。叹。它不是标准的,但它在 g++-4.8 及更高版本上使用 -std=c++14 编译。
标签: c++ c++11 user-defined-literals