当我发现可以模仿用户定义的文字时,我感到很惊讶:
template <char ...C> std::string operator ""_s()
{
char arr[]{C...};
return arr;
}
// ...
std::cout << 123_s;
但是上面的声明不适用于字符串文字:
"123"_s
给了我以下错误:
prog.cpp:在功能&#39; int main()&#39;:
prog.cpp:12:15:错误:没有匹配函数来调用&#39;运算符&#34;&#34; _s()&#39;
std :: cout&lt;&lt; &#34; 123&#34; _s;prog.cpp:4:34:注意:候选人:模板std :: string operator&#34;&#34; _s()
template std :: string operator&#34;&#34; _s()prog.cpp:4:34:注意:模板参数扣除/替换失败:
是否有办法将模板化的用户定义文字与字符串文字一起使用?
答案 0 :(得分:2)
Clang和GCC支持一个允许你做的扩展
template<class CharT, CharT... Cs>
std::string operator ""_s() { return {Cs...}; }
但标准C ++中没有任何内容;标准化这个的提议已经多次提出并且每次都被拒绝,最近不到一个月之前,主要是因为模板参数包是真正低效的表示字符串的方式。