2015-10-20 8 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<<; 

è il modo di dichiarare di utilizzare solo uno dei operators << dal namespace nm in quello globale, e non entrambi?lì con dichiarazione per operatore di output cemento (con firma cemento)

+0

Qual è l'uso della dichiarazione 'using'? –

+0

'utilizzando ns_name :: name' dichiarazione using rende il nome del simbolo dal ns_name namespace accessibili per la ricerca non qualificata come dichiarato nello stesso ambito di classe, bloccare la portata, o dello spazio dei nomi in cui appare come questa dichiarazione using –

+0

Perché si vuole a Fai quello. Qual è il tuo obiettivo –

risposta

3

Una soluzione potrebbe essere quella di mettere ogni operator<< nel proprio spazio nome nidificato:

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

Se non riesco a modificare il codice di nm? –

+0

Uno di questi potrebbe essere 'inline'. – edmz

+0

Se si ha il controllo sul codice, è possibile aswell mettere la dichiarazione utilizzando tra due 'namespace nm {...}' blocchi, e dichiarare l'altro '' operatore << nel secondo blocco. –

Problemi correlati