请考虑以下事项:
#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)
有效,但很笨拙。
答案 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
同时位于X
和X::literals
。这允许人们using namespace X::literals;
而不会从X
中提取所有内容,但X
_test
内也可以使用。{/ p>
导入单个文字有点烦人。
std
同时对std::chrono
和std::literals
以及std::chrono::literals
执行此操作。 inline namespace
允许您定义命名空间的子部分,您认为人们希望将其作为块导入,而不会获取剩余的部分。