ABC Virtual OStream Оператор вставки - PullRequest
2 голосов
/ 12 апреля 2009

Рассмотрим следующий фрагмент:

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.

1 Ответ

6 голосов
/ 12 апреля 2009

Вам нужна бесплатная функция:

ostream & operator << ( ostream & os, const ObjectInterface & oi ) {
    oi.Print( os );
    return os;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...