2016-03-09 2 views
0

Мы пытаемся скрыть класс за новым пространством имен, однако мы хотели бы сохранить исходное имя.Есть ли способ внедрить класс в новое пространство имен с тем же именем?

namespace first { 
    class Logger { ... }; 
} 

namespace second { 
    using Logger = first::Logger; 
} 

error: definition of type 'Logger' conflicts with type alias of the same name class Logger;

+0

'namespace second = first;'? : o) – Columbo

+0

Мы хотим просто взять определенные элементы в новое пространство имен. – Corvusoft

+2

И в чем вопрос? –

ответ

1

Да, мы можем:

namespace first { 
    class Logger { }; 
} 

namespace second { 
    typedef first::Logger Logger; 
} 

typedef is apparently equivalent to using (в C++ 11), только более послушный.

+0

Почему downvote? –

+0

Возможно, потому, что я посоветовал использовать «typedef» вместо того, чтобы предоставить способ сделать это с помощью «использования». –

1

Право-о, это было связано с прямым объявлением типа Logger в нашей собственной базе кода.

namespace first { 
    class Logger { ... }; 
} 

namespace second { 
    using Logger = first::Logger; 

    ... some time later ... 
    class Logger; 
} 
+0

Что мы узнали здесь сегодня? –

Смежные вопросы