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

考虑以下:
#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进行此操作.内联命名空间允许您定义命名空间的子部分,您认为人们希望将其作为块导入而不会获取其余的部分.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...