如何在命名空间中引用用户定义的文本运算符

How to refer to user defined literal operator inside a namespace?

本文关键字:定义 文本 运算符 用户 引用 命名空间      更新时间:2023-10-16

请考虑以下事项:

#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内用户定义的文字运算符。有没有办法在不显式包含命名空间的情况下引用文字运算符?我试过

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拉入所有东西的情况下using namespace X::literals;,但在X _test内也可用。

导入单个文本有点烦人。

std std::chronostd::literalsstd::chrono::literals都这样做了。 inline namespace允许您定义命名空间的子部分,您认为人们希望将其作为块导入而不获取其余部分。