最近我为自己创建了一个新的小项目,并正在阅读一些有关命名约定的文献。独立于首选的编码风格,google coding style 或hungarian notation(在我看来,系统匈牙利风格(即使有人认为这不是一个好的风格)不是应用风格)或其他一些我没有提到的风格。我虽然使用命名约定或命名空间。我也读过post。
我的注意力在于继承。
像谷歌一样的例子:class MyClassInterface {
int some_stuff() = 0;
};
class MyClassA : MyClassInterface {
int some_stuff() { return 1; }
};
class MyClassB : MyClassInterface {
int some_stuff() { return 2; }
};
现在,我的想法是使用命名空间:
namespace my {
namespace interface {
class Class {
int some_stuff() = 0;
};
} // namespace interface
namespace a {
class Class : interface::Class {
int some_stuff() { return 1; }
};
} // namespace a
namespace b {
class Class : interface::Class {
int some_stuff() { return 2; }
};
} // namespace b
} // namespace my
在这个例子中可以看到这种命名的优点:
using namepsace my;
void foo(interface::Class lala) {
// do something;
}
// ...
int main() {
using namespace a;
Class bar;
foo(bar);
b::Class bar2;
foo(bar2);
}
现在我可以输入一个using namespace
,它将始终使用首选的一个,但所有其他子类仍可通过命名空间访问。
所以我的问题是,这是一个好主意,还是有一些我看不到的缺点?
我也可以使用
namespace my {
namespace interface {
class Class {
int some_stuff() = 0;
};
} // namespace interface
class ClassA : interface::Class {
int some_stuff() { return 1; }
};
class ClassB : interface::Class {
int some_stuff() { return 2; }
};
} // namespace my
不嵌套到多个名称空间。
我不确定StackOverflow是否是提出问题的正确位置,但对程序员来说,甚至没有标签命名约定(但命名标准)。关于命名空间和命名约定的讨论并不多。如果这是错的我可以移动我的问题。
答案 0 :(得分:2)
我认为一个好的规则是:使用命名空间来标识库(库的内容)。在非常特定的情况下使用嵌套命名空间(嵌套命名空间的内容可以被视为库本身的情况)。
一个示例可以是标准库:它通过std
命名空间提供其功能,并且(例如)通过{{1)提供计时库(它可以被视为库本身)。命名空间。其他例子可能是Boost及其库。