Defining a class within a namespace

亡梦爱人 提交于 2019-12-03 02:46:30

问题


Is there a more succinct way to define a class in a namespace than this:

namespace ns { class A {}; }

I was hoping something like class ns::A {}; would work, but alas not.


回答1:


You're close, you can forward declare the class in the namespace and then define it outside if you want:

namespace ns {
    class A; // just tell the compiler to expect a class def
}

class ns::A {
    // define here
};

What you cannot do is define the class in the namespace without members and then define the class again outside of the namespace. That violates the One Definition Rule (or somesuch nonsense).




回答2:


You can do that, but it's not really more succint.

namespace ns {
    class A;
}

class ns::A {
};

Or

namespace ns {
    class B;
}

using ns::B;
class B {
};



回答3:


The section you should be reading is this:

7.3.1.2 Namespace member definitions

3 Every name first declared in a namespace is a member of that namespace.[...]

Note the term -- declaration so D.Shawley (and his example) is correct.




回答4:


No you can't. To quote the C++ standard, section 3.3.5:

A name declared outside all named or unnamed namespaces (7.3), blocks (6.3), fun (8.3.5), function definitions (8.4) and classes (clause 9) has global namespace scope

So the declaration must be inside a namespace block - the definition can of course be outside it.



来源:https://stackoverflow.com/questions/623903/defining-a-class-within-a-namespace

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