【发布时间】:2017-04-16 15:39:28
【问题描述】:
当我发现可以将用户定义的文字模板化时,我感到很惊讶:
template <char ...C> std::string operator ""_s()
{
char arr[]{C...};
return arr;
}
// ...
std::cout << 123_s;
但上述声明不适用于字符串文字:
"123"_s
给我以下错误:
prog.cpp: 在函数 'int main()' 中:
prog.cpp:12:15: 错误:没有匹配函数调用 '运算符""_s()'
std::coutprog.cpp:4:34: 注意:候选:模板 std::string 运算符""_s()
模板 std::string 运算符 ""_s()prog.cpp:4:34: 注意:模板参数推导/替换失败:
有没有办法将模板化的用户定义文字也与字符串文字一起使用?
【问题讨论】:
-
你想达到什么目的?请注意,您也不能这样做
<< foo_s;,不需要引号使其失败。 -
@Jean-FrançoisFabre 我知道。当然,这不是一个真正的用例。我希望能够基于字符串文字生成唯一类型,这可能是一种可能的方式。