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

标签 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 实现语法方法?

谢谢

最佳答案

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

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

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

关于C++ - 如何用自己的类复制 std::fixed 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454835/

相关文章:

javascript - 这个函数有什么问题吗?不返回我指定的内容

c++ - 如何读取文件或流直到找到字符串

sockets - 使用NAudio播放来自android设备的音频字节流

c++ - 当它被称为 shared_ptr<Basic> 时调用派生类方法

c++ - 为什么 make_unique 有一个可以将 std::bind 作为参数的构造函数的额外移动?

python - python函数中的形参和实参

javascript - 如何仅在第一个函数完成后才执行第二个函数?

c++ - "You can' t 前向声明重载 operator&"的类?

c++ - 如何在 C++ 中的一行中从常量数组​​返回值

c++ - C++ 中用于字节 block 随机读/写的基本文件 I/O