C++ - 如何使用自己的类复制 std::固定语法



我想复制std::fixed语法

std::cout << std::fixed << ...;

但是使用我自己的解析器类

parser >> skip >> i;

我无法弄清楚我做错了什么。我已经查看了std::fixed语法<iostream>以了解它是如何完成的,但仍然无法使其工作。

下面是一个具有我想要实现的语法的解析器的简短示例。

struct parser
{
   void skip()
   {
      // skip
   }
   parser &operator>>(int i)
   {
      // parse
      return *this;
   }
   // parser &operator>>(parser &p)
   // {
   //   p.skip();
   //   return *this;
   // }
};
parser &skip(parser &p)
{
   p.skip();
   return p;
}
parser p;
int i = 0;
p >> skip >> i;

我已经为我的解析器重载了operator>>,但这不是我想要的语法。

如何使用 skip 方法实现语法?

谢谢

>skip是一个函数,因此您希望重载函数指针的operator>>。然后,您只需使用参数调用函数 *this

parser& operator>>(parser& f(parser&))
{
    return f(*this);
}

请注意,std::istream已经支持机械手。您的全局skip函数可以只获取并返回std::istream&。然后,您可以在现有std::istream上使用skip或创建新。

相关内容

  • 没有找到相关文章