2015-10-20 12 views
8
namespace nm 
{ 
    class C1 {}; 
    class C2 {}; 
    inline std::ostream& operator << (std::ostream& lhs, std::vector<C1> const&) { return lhs; } 
    inline std::ostream& operator << (std::ostream& lhs, std::vector<C2> const&) { return lhs; } 
} 

using nm::operator<<; 

(beton imzalı) yolu beton çıkış operatörü için deklarasyon var mı kullanıyor?yalnızca genel birinde ad <code>nm</code> den <code>operators <<</code> birini değil, ikisini de kullanmak için ilan etmek

+0

'using' beyanı kullanımı nedir? –

+0

'ns_name :: name' kullanarak-declaration, isimsiz ns_name ad alanından, aynı sınıf kapsamı, blok kapsamı veya bu kullanım-bildiriminin göründüğü ad alanı gibi, nitelenmemiş arama için erişilebilen ad alanı ns_name yapar –

+0

Neden istersiniz? yap bunu. Hedefiniz nedir –

cevap

3

bir çözüm kendi iç içe adı uzayda her operator<< koymak olacaktır:

namespace nm 
{ 
    class C1 {}; 
    class C2 {}; 
    namespace nm1 { 
    inline std::ostream& operator << (std::ostream& lhs, C1 const&) { return lhs; } 
    } 
    namespace nm2 { 
    inline std::ostream& operator << (std::ostream& lhs, C2 const&) { return lhs; } 
    } 
} 

using nm::nm1::operator<<; 

LIVE DEMO

+1

Eğer nm kodunu değiştiremezsem? –

+0

Bunlardan biri "inline" olabilir. – edmz

+0

Kod üzerinde kontrolünüz varsa, kullanma bildirimini iki 'isim-alanı nm {...}' blokları arasına yerleştirebilir ve ikinci blokta diğer işleç << ile bildirebilirsiniz. –