Может ли класс совместно использовать имя пространства имен? - PullRequest
19 голосов
/ 02 мая 2011

Допустим ли следующий код C ++?

namespace Foo
{
    class Bar
    {
        // Class code here.
    };
}

namespace Foo
{
    namespace Bar
    {
        void SomeFunction();
        {
            // Function code here.
        }
    }
 }

Другими словами, может ли быть пространство имен с тем же именем, что и у класса?

Ответы [ 3 ]

16 голосов
/ 02 мая 2011

У вас не может быть договоренности, которая у вас есть в вашем вопросе, потому что нет возможности устранить неоднозначность Bar.

Мой компилятор говорит:

error C2757: 'Bar' : a symbol with this name already exists and therefore this name cannot be used as a namespace name
14 голосов
/ 02 мая 2011

"может быть пространство имен с тем же именем, что и a класс ?"

Нет , если они находятся в том же пространстве имен, что и в вашем случае.

В противном случае да. Все может иметь то же имя, что и любое другое, если оно находится в разных пространствах имен. См. этот поток stackoverflow в качестве ссылки.

1 голос
/ 04 октября 2018

Нет, но вы можете SomeFunction быть статическим членом класса Bar.

namespace Foo
{
    class Bar
    {
        // Class code here.
        static void SomeFunction()
        {
            // Function code here.
        }
    };
}

Результат не на 100% эквивалентен тому, что вы хотите (из-за ADL), ноквалифицированные имена - это то, что вы ожидаете.

...