类可以共享命名空间的名称吗?

时间:2011-05-02 11:49:14

标签: c++ class namespaces symbols

以下C ++代码是否有效?

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

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

换句话说,是否可以存在与类同名的命名空间?

3 个答案:

答案 0 :(得分:14)

您无法在问题中做出安排,因为无法消除Bar的歧义。

我的编译器说:

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

答案 1 :(得分:12)

“是否可以存在与 a class 同名的命名空间?”

,如果它们位于相同的命名空间中,就像您的情况一样。

否则,是的。如果它们位于不同的名称空间中,则任何名称都可以与其他名称相同。请参阅this stackoverflow线程作为参考。

答案 2 :(得分:1)

否,但是您可以让SomeFunctionBar类的静态成员。

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

结果不是100%等于您想要的(由于ADL),但是合格的名称正是您所期望的。