C++ 如何在名称空间中引用用户定义的文本运算符?
考虑以下几点:C++ 如何在名称空间中引用用户定义的文本运算符?,c++,c++11,user-defined-literals,C++,C++11,User Defined Literals,考虑以下几点: #include <iostream> namespace X { void operator ""_test(unsigned long long x) { std::cout << x; } } int main() { using namespace X; 10_test; // 10_X::test; /* doesn't work */ } 但是,当然不能像解析器认为的那样,X
#include <iostream>
namespace X
{
void operator ""_test(unsigned long long x)
{
std::cout << x;
}
}
int main()
{
using namespace X;
10_test;
// 10_X::test; /* doesn't work */
}
但是,当然不能像解析器认为的那样,X
引用操作符的名称
X::operator ""_test(10)
工作正常,但很笨拙。#包括
#include <iostream>
namespace X {
inline namespace literals {
void operator ""_test(unsigned long long x) {
std::cout << x;
}
}
}
int main() {
{
using namespace X::literals;
10_test;
}
{
using X::operator""_test;
10_test;
}
}
名称空间X{
内联命名空间文本{
无效运算符“”\u测试(无符号长x){
std::cout如果必须显式限定UDL,它有什么意义?如果有什么意义,我希望它是10 X::\u test
,因为下划线是文本名称的一部分。您是否正在使用X:“”_test;
可能吗?作为一项工作,可以将文本放在它们自己的文本名称空间中,然后您可以只包含该名称空间而不是整个名称空间。您还可以使用X::operator“”\u test@NathanOliver使用X::“\u test
不会这样做。我认为使用X::operator”_测试
就可以了。太好了,看起来是个不错的选择。
#include <iostream>
namespace X {
inline namespace literals {
void operator ""_test(unsigned long long x) {
std::cout << x;
}
}
}
int main() {
{
using namespace X::literals;
10_test;
}
{
using X::operator""_test;
10_test;
}
}