2011-11-10 15 views

cevap

13

Siz de operator<<outer arkadaş yapabiliriz. Yoksa , nested tamamen inline uygulamak olabilir mesela:

class Outer 
{ 
    class Inner 
    { 
     friend std::ostream& 
     operator<<(std::ostream& dest, Inner const& obj) 
     { 
      obj.print(dest); 
      return dest; 
     } 
     // ... 
     // don't forget to define print (which needn't be inline) 
    }; 
    // ... 
}; 
+0

ve inci e yazdırma fonksiyonu 'const' üye işlevi olmalıdır. Eğer std :: ostream & print (std :: ostream & out) const 'ise, 'operator <<' sadece bir satır olabilir: 'return obj.print (dest);'. – Nawaz

+0

Neden std: ostream'in Inner'ın bir arkadaşı olması gerekir? – Mordachai

+1

Çünkü bunu 'Inner' içinde tanımlayamazsınız. (Ve eğer 'Inner' içinde tanımlanmamışsa, 'Inner' öğesine erişememesi sorunu var, çünkü 'Inner', 'Outer' özel bir üyesidir.) –

6

sen (ss, cpp) iki farklı dosyada aynı şeyi istiyorsanız arkadaşınıza iki defa aşağıdaki gibi işlev vardır:

ss:

// file.hh 
class Outer 
{ 
    class Inner 
    { 
     friend std::ostream& operator<<(std::ostream& dest, Inner const& obj); 
     // ... 
    }; 

    friend std::ostream& operator<<(std::ostream& dest, Outer::Inner const& obj); 
    // ... 
}; 

cpp:

// file.cpp: 
#include "file.hh" 

std::ostream &operator<<(std::ostream& dest, Outer::Inner const& obj) 
{ 
    return dest; 
}