用户定义的文字运算符的“using”声明
`using` declaration for a user-defined literal operator
是否可以为文字运算符 operator ""
声明 using
?
例如,
#include <chrono>
namespace MyNamespace
{
constexpr std::chrono::hours operator "" _hr(unsigned long long n){
return std::chrono::hours{n};
}
// ... other stuff in the namespace ...
}
using MyNamespace::operator""; // DOES NOT COMPILE!
int main()
{
auto foo = 37_hr;
}
我的解决方法是将这些运算符放在它们自己的嵌套命名空间中,称为 literals
,这允许 using namespace MyNamespace::literals;
,但这似乎有些不雅,而且我不明白为什么 using
指令不能像用于命名空间中的任何其他函数或类型一样用于 operator
函数。
using MyNamespace::operator""_hr;
// ^^^
语法参考:
using-declaration:
using typename (opt) nested-name-specifier unqualified-id ;
using :: unqualified-id ;
unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ class-name
~ decltype-specifier
template-id
literal-operator-id:
operator string-literal identifier
operator user-defined-string-literal
是否可以为文字运算符 operator ""
声明 using
?
例如,
#include <chrono>
namespace MyNamespace
{
constexpr std::chrono::hours operator "" _hr(unsigned long long n){
return std::chrono::hours{n};
}
// ... other stuff in the namespace ...
}
using MyNamespace::operator""; // DOES NOT COMPILE!
int main()
{
auto foo = 37_hr;
}
我的解决方法是将这些运算符放在它们自己的嵌套命名空间中,称为 literals
,这允许 using namespace MyNamespace::literals;
,但这似乎有些不雅,而且我不明白为什么 using
指令不能像用于命名空间中的任何其他函数或类型一样用于 operator
函数。
using MyNamespace::operator""_hr;
// ^^^
语法参考:
using-declaration: using typename (opt) nested-name-specifier unqualified-id ; using :: unqualified-id ; unqualified-id: identifier operator-function-id conversion-function-id literal-operator-id ~ class-name ~ decltype-specifier template-id literal-operator-id: operator string-literal identifier operator user-defined-string-literal