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

时间:2018-03-01 16:35:28

标签: c++ c++11 user-defined-literals

请考虑以下事项:

#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 */
}

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

10_X::test;

但当然没有工作,因为解析器认为X是指运营商的名称。

X::operator ""_test(10)

有效,但很笨拙。

1 个答案:

答案 0 :(得分:16)

#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同时位于XX::literals。这允许人们using namespace X::literals;而不会从X中提取所有内容,但X _test内也可以使用。{/ p>

导入单个文字有点烦人。

std同时对std::chronostd::literals以及std::chrono::literals执行此操作。 inline namespace允许您定义命名空间的子部分,您认为人们希望将其作为块导入,而不会获取剩余的部分。