考虑以下:
- #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中的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中.这允许人们使用命名空间X :: literals;没有从X中提取所有内容,但在X _test中也可以使用.
导入单个文字有点烦人.
std使用std :: chrono和std :: literals以及std :: chrono :: literals进行此操作.内联命名空间允许您定义命名空间的子部分,您认为人们希望将其作为块导入而不会获取其余的部分.