【问题标题】:ABC Virtual OStream Insertion OperatorABC 虚拟 OStream 插入运算符
【发布时间】:2009-04-11 20:02:19
【问题描述】:

考虑以下 sn-p:

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";
    }
};

有没有办法将ObjectInterface 中的Print 更改为标准的“std::ostream&amp; operator&lt;&lt;”输出类型?我不能让它工作。

编辑:我基本上是想弄清楚我是否可以让friendvirtual 一起工作。

【问题讨论】:

    标签: c++ virtual


    【解决方案1】:

    你需要一个免费的函数:

    ostream & operator << ( ostream & os, const ObjectInterface & oi ) {
        oi.Print( os );
        return os;
    }
    

    【讨论】:

    • 天哪,这太简单了。我不敢相信我没有想到这一点......谢谢。
    • 别觉得太糟糕了。贝尔实验室(我猜)第一个想到它的人可能对自己很满意——我们其他人只是使用它。
    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2011-09-08
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多