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

vso*_*tco 11 c++ user-defined-literals c++11

考虑以下:

#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 */
}
Run Code Online (Sandbox Code Playgroud)

我指的是用户定义的字面运营商内部的namespace X一个显式using namespace X;.有没有明确包含命名空间的方式引用文字运算符?我试过了

10_X::test;
Run Code Online (Sandbox Code Playgroud)

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

X::operator ""_test(10)
Run Code Online (Sandbox Code Playgroud)

工作,但它很笨拙.

Yak*_*ont 17

#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;
  }
}
Run Code Online (Sandbox Code Playgroud)

_test既是在XX::literals.这允许人们在using namespace X::literals;没有拉入所有东西的情况下X,但X _test也可以在其中.

导入单个文字有点烦人.

std这是否符合双方std::chronostd::literalsstd::chrono::literals. inline namespaces允许您定义命名空间的子部分,您认为人们希望将其作为块导入而不会获取其余的部分.