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

有沒有辦法申報使用從命名空間nm在全球一operators <<只有一個,而不是兩者兼而有之?聲明混凝土輸出操作(以實際簽名)

+0

什麼用的'using'申報? –

+0

'using ns_name :: name' using-declaration使命名空間ns_name中的符號名稱可以用於非限定查找,就像在使用聲明所在的同一類作用域,塊作用域或命名空間中聲明的一樣 –

+0

爲什麼要使用去做。你的目標是什麼 –

回答

3

一個解決辦法是把每個operator<<在自己的嵌套命名空間:

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

如果我不能更改nm的代碼? –

+0

其中之一可以是'inline'。 – edmz

+0

如果您可以控制代碼,則可以將using聲明放在兩個'namespace nm {...}塊之間,並在第二個塊中聲明另一個'operator <<'。 –