如何在命名空间中引用用户定义的文字运算符?
How to refer to user defined literal operator inside a namespace?
考虑以下因素:
#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 */
}
我可以通过显式 using namespace X;
引用 namespace X
中的 user defined literal operator。有什么方法可以在不显式包含名称空间的情况下引用文字运算符吗?我尝试了
10_X::test;
但当然不起作用,因为解析器认为 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;
}
}
_test
既在X
又在X::literals
。这允许人们 using namespace X::literals;
而无需从 X
中提取所有内容,但在 X
内 _test
也是可用的。
导入单个文字有点烦人。
std
对 std::chrono
和 std::literals
以及 std::chrono::literals
都执行此操作。 inline namespace
s 允许您定义命名空间的子部分,您认为人们希望将这些子部分作为一个块导入而不获取其余部分。
考虑以下因素:
#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 */
}
我可以通过显式 using namespace X;
引用 namespace X
中的 user defined literal operator。有什么方法可以在不显式包含名称空间的情况下引用文字运算符吗?我尝试了
10_X::test;
但当然不起作用,因为解析器认为 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;
}
}
_test
既在X
又在X::literals
。这允许人们 using namespace X::literals;
而无需从 X
中提取所有内容,但在 X
内 _test
也是可用的。
导入单个文字有点烦人。
std
对 std::chrono
和 std::literals
以及 std::chrono::literals
都执行此操作。 inline namespace
s 允许您定义命名空间的子部分,您认为人们希望将这些子部分作为一个块导入而不获取其余部分。