Can a class share a namespace's name?

微笑、不失礼 提交于 2019-11-30 21:45:19

问题


Is the following C++ code valid?

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

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

In other words, can there be a namespace with the same name as a class?


回答1:


You cannot have the arrangement you have in your question because there is no way to disambiguate Bar.

My compiler says:

error C2757: 'Bar' : a symbol with this name already exists and therefore this name cannot be used as a namespace name



回答2:


"can there be a namespace with the same name as a class?"

No, If they are in the same namespace, as in your case.

Otherwise, yes. Anything can have the same name as anything else if they are in different namespaces. See this stackoverflow thread as reference.




回答3:


No, but you can have SomeFunction be a static member of the Bar class.

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

The result is not 100% equivalent to what you want (because of ADL) but the qualified names are what you expect.



来源:https://stackoverflow.com/questions/5856759/can-a-class-share-a-namespaces-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!