请考虑以下代码段:
struct ObjectInterface
{
virtual ~ObjectInterface() {}
virtual void Print(std::ostream& target) const = 0;
};
struct Foo : ObjectInterface
{
virtual void Print(std::ostream& target) const
{
target << "Foo";
}
};
struct Bar : ObjectInterface
{
virtual void Print(std::ostream& target) const
{
target << "Bar";
}
};
有没有办法将Print
中的ObjectInterface
更改为标准“std::ostream& operator<<
” - 输出类型?我无法使它发挥作用。
编辑:我基本上是想弄清楚我是否可以friend
与virtual
合作。
答案 0 :(得分:6)
您需要一个免费功能:
ostream & operator << ( ostream & os, const ObjectInterface & oi ) {
oi.Print( os );
return os;
}