【问题标题】:`using` declaration for a user-defined literal operator用户定义的文字运算符的“使用”声明
【发布时间】:2015-08-31 20:18:15
【问题描述】:

是否可以为文字运算符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;
  • @PiotrSkotnicki 我的朋友,这是一个答案。 (甚至是正确答案!)

标签: c++ namespaces operator-keyword using user-defined-literals


【解决方案1】:
using MyNamespace::operator""_hr;
//                           ^^^

DEMO

语法参考:

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

【讨论】:

  • 那么user-defined-string-literal""_hr对应的语法元素吗?
  • @KyleStrand 是的,user-defined-string-literalstring-literal identifier 相同,分别是 ""_hr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多