2009-04-11 14 views
2

Betrachten Sie das folgende Snippet:ABC Virtuelle oStream Insertion Operator

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

Gibt es eine Möglichkeit Print in ObjectInterface den Standard "std::ostream& operator<<" -Typ der Ausgabe zu ändern? Ich kann es nicht funktionieren lassen.

EDIT: Ich versuche im Grunde herauszufinden, ob ich friend mit virtual arbeiten kann.

Antwort

6

Sie benötigen eine kostenlose Funktion:

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

Gott, das furchtbar einfach. Ich kann nicht glauben, dass ich nicht daran gedacht habe ... Danke. –

+0

Fühlen Sie sich nicht so schlecht. Der erste Typ bei Bell Labs (denke ich), der daran dachte, war wahrscheinlich ziemlich zufrieden mit sich selbst - der Rest von uns benutzt es einfach. –

Verwandte Themen