是否可以定义第二个插入运算符以具有两种输出类的模式?比如说一种输出所有成员,另一种只输出一些基本的唯一标识符,该标识符可以在日志中进行 grep 处理?如果是这样,是否有通常选择的运算符?我猜想类似于 <<
人们可能会使用 <<<
这是否合法?
谢谢
最佳答案
如果您只想输出 id,那么最好的办法可能是提供一种方法来获取可流式传输的 id(例如 std::string id() const;
)。对于其他处理代码的人来说,这比一些奇怪的运算符(operator)使用更直观。
您对<<<
的建议(不可能在 C++ 中创建新的运算符,但暂时忽略它)表明您很高兴在调用点有不同的代码。因此,你得到的唯一好处就是节省了一些角色的源代码;不值得混淆。
相比之下,在某些情况下,您希望相同的流式表示法调用不同的行为,例如在仅 ID 数据和完整数据之间切换,或者不同的表示形式,例如标签/值、CSV、XML 和二进制。这些备选方案通常最好通过以下方式传达:
- 使用不同的流类型(例如 XMLStream 而不是
std::ostream
),并定义XMLStream& operator<<(XMLStream&, const My_Type&)
等等,和/或 - 使用流操纵器 - 您可以创建自己的 - 随机 Google 结果:http://www.informit.com/articles/article.aspx?p=171014&seqNum=2
关于C++ 流二次插入运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840759/