2009-04-11 9 views
2

Considérons l'extrait suivant:ABC Virtual ostream Insertion opérateur

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

Est-il possible de changer Print en ObjectInterface à la norme "std::ostream& operator<<" -type de la production? Je ne peux pas le faire fonctionner.

EDIT: Essentiellement, je cherche à savoir si je peux faire friend de travail avec virtual.

Répondre

6

Vous avez besoin d'une fonction libre:

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

Dieu, qui est terriblement simple. Je ne peux pas croire que je n'ai pas pensé à ça ... Merci. –

+0

Ne vous sentez pas trop mal. Le premier type de Bell Labs (j'imagine) qui y pensait était probablement plutôt content de lui - le reste d'entre nous l'utilise. –