命名空间内的类定义
Class definition inside namespace
我有一个这样的类声明:
// 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() {}
}
但我不能。这是为什么呢?我以为类声明命名空间,但我一定错了。作用域运算符不应该先解析命名空间作用域,然后再解析类作用域吗?
我问是因为任何时候你有一个非平凡长度的类名,重新键入类名可能会变得非常重复,特别是如果它有多个成员。也许就是这样让人们定义小类接口。
这是为什么呢?我以为类声明了命名空间,但我一定错了
你错了。:)
作用域运算符不应该先解析命名空间作用域,然后再解析类作用域吗?
语言支持这一点并非不可能,但它根本不支持。
可能是因为它可能会有点令人困惑,并且因为以下内容将完全撒谎:
class bar {
void x();
void y();
void z();
};
namespace bar {
void x() {}
void y() {}
void z() {}
}
实际上,与可以使用命名空间执行的这种"内联定义"的类比是成员函数的内联定义:
class bar {
void x() {}
void y() {}
void z() {}
};
首先,你的类声明后面需要一个;
:
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
是一个类,而不是一个命名空间。
相关文章:
- 在命名空间中定义函数还是限定函数
- 使用命名空间时出现多个定义错误
- 如何对命名空间限定类型进行类型定义?
- C++未定义的命名空间
- 命名空间更改函数定义
- 使用命名空间在另一个".cpp"文件中定义
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 在方法定义中显式指定命名空间
- 在 c++ 中定义命名空间中模板类的友元函数时出现问题
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 为什么 ADL 优先于'std namespace'中的函数,但等于用户定义命名空间中的函数?
- G++显示关于未定义命名空间的错误
- 定义命名空间内类的构造函数
- 在自定义命名空间下包含一个标头
- 与自定义命名空间的链接失败未解析的外部符号
- 自定义命名空间的链接器错误
- 试图通过using-declaration定义命名空间成员
- 如何正确重载作为用户定义命名空间一部分的模板化类的插入运算符?
- 定义命名空间的变体和__visibility__的含义
- 重新定义命名空间的变量