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

时间:2014-12-13 02:14:55

标签: c++ function stream overloading

我想复制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方法实现语法?

由于

1 个答案:

答案 0 :(得分:2)

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

调用该函数
parser& operator>>(parser& f(parser&))
{
    return f(*this);
}

请注意std::istream已经支持操纵者。您的全局skip函数可以获取并返回std::istream&。然后,您可以在已存在的skip上使用std::istream或创建一个新的。{/ p>