我想复制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
方法实现语法?
由于
答案 0 :(得分:2)
skip
是一个函数,因此您希望为函数指针重载operator>>
。然后,您只需使用参数*this
:
parser& operator>>(parser& f(parser&))
{
return f(*this);
}
请注意std::istream
已经支持操纵者。您的全局skip
函数可以获取并返回std::istream&
。然后,您可以在已存在的skip
上使用std::istream
或创建一个新的。{/ p>