命名空间内的类定义
Posted
技术标签:
【中文标题】命名空间内的类定义【英文标题】:Class definition inside namespace 【发布时间】:2014-01-17 15:07:15 【问题描述】:我有一个这样的类声明:
// bar.h
namespace foo
class bar
// members both public and private
当我定义类时,我想这样做
// bar.cpp
namespace foo::bar
// member definitions
而不是
namespace foo
bar::x()
bar::y()
bar::z()
但我不能。为什么是这样?我认为类声明了命名空间,但我一定是错的。作用域运算符不应该先解析命名空间作用域,然后再解析类作用域吗?
我问是因为任何时候你有一个非平凡长度的类名,重新输入类名可能会变得非常重复,特别是如果它有多个成员。可能是这样让人定义小类接口的吧。
【问题讨论】:
您在bar
定义中缺少结束 ;
。
【参考方案1】:
这是为什么?我以为类声明了命名空间,但我一定是错的
你错了。 :)
作用域运算符不应该先解析命名空间作用域,然后再解析类作用域吗?
语言支持这一点并非不可能,但它根本不支持。
可能是因为它可能会有点令人困惑,并且因为以下内容完全是谎言:
class bar
void x();
void y();
void z();
;
namespace bar
void x()
void y()
void z()
真的,类似于这种你可以用命名空间做的“内联定义”,就是成员函数的内联定义:
class bar
void x()
void y()
void z()
;
【讨论】:
【参考方案2】:首先,你的类声明后面需要一个;
:
namespace foo
class bar
// members both public and private
; // error without this
在实现类(非内联)时,可以通过两种方式实现:
void foo::bar::x()
// function definition
或
namespace foo
void bar::x()
// function definition
注意bar
是一个类,不是一个命名空间。
【讨论】:
以上是关于命名空间内的类定义的主要内容,如果未能解决你的问题,请参考以下文章