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

Có cách để tuyên bố chỉ sử dụng một trong những operators << từ namespace nm trong một toàn cầu, chứ không phải cả hai?sử dụng khai cho nhà điều hành sản lượng bê tông (có chữ ký của bê tông)

+0

việc sử dụng của 'khai using' là gì? –

+0

'using ns_name :: name' sử dụng khai báo làm cho tên biểu tượng từ không gian tên ns_name có thể truy cập để tra cứu không đủ tiêu chuẩn như được khai báo trong cùng phạm vi lớp, phạm vi khối hoặc vùng tên như nơi khai báo sử dụng này xuất hiện –

+0

Tại sao bạn muốn làm việc đó đi. Mục tiêu của bạn là gì –

Trả lời

3

Một giải pháp sẽ được đưa từng operator<< trong không gian tên lồng nhau của riêng mình:

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

Nếu tôi không thể thay đổi mã của nm? –

+0

Một trong số chúng có thể là 'nội dòng'. – edmz

+0

Nếu bạn có quyền kiểm soát mã, bạn cũng có thể đặt khai báo sử dụng ở giữa hai khối 'namespace nm {...}' và khai báo toán tử '' 'khác trong khối thứ hai. –

Các vấn đề liên quan