c – 如何在命名空间中引用用户定义的文字运算符?

前端之家收集整理的这篇文章主要介绍了c – 如何在命名空间中引用用户定义的文字运算符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑以下:
  1. #include <iostream>
  2.  
  3. namespace X
  4. {
  5. void operator ""_test(unsigned long long x)
  6. {
  7. std::cout << x;
  8. }
  9. }
  10.  
  11. int main()
  12. {
  13. using namespace X;
  14. 10_test;
  15. // 10_X::test; /* doesn't work */
  16. }

我可以通过显式使用命名空间X;来引用命名空间X中的user defined literal operator.有没有明确包含命名空间的方式引用文字运算符?我试过了

  1. 10_X::test;

但当然不起作用,因为解析器认为X指的是运算符的名称.

  1. X::operator ""_test(10)

工作,但它很笨拙.

解决方法

  1. #include <iostream>
  2.  
  3. namespace X {
  4. inline namespace literals {
  5. void operator ""_test(unsigned long long x) {
  6. std::cout << x;
  7. }
  8. }
  9. }
  10.  
  11. int main() {
  12. {
  13. using namespace X::literals;
  14. 10_test;
  15. }
  16. {
  17. using X::operator""_test;
  18. 10_test;
  19. }
  20. }

_test都在X和X :: literals中.这允许人们使用命名空间X :: literals;没有从X中提取所有内容,但在X _test中也可以使用.

导入单个文字有点烦人.

std使用std :: chrono和std :: literals以及std :: chrono :: literals进行此操作.内联命名空间允许您定义命名空间的子部分,您认为人们希望将其作为块导入而不会获取其余的部分.

猜你在找的C&C++相关文章