最近我开始了自己的一个新的小项目,并且正在阅读一些关于命名约定的文献。无论首选哪种编码风格,谷歌编码风格 或匈牙利符号(在我看来系统匈牙利风格(即使有人认为它不是一种好风格)而不是应用程序风格)或其他一些我没有提到的风格。我虽然关于使用命名约定或通过命名空间来制作它。我也读过这篇文章。
我的注意力集中在继承上。
谷歌之类的例子:
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);
}
现在我可以键入 ausing 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 是否是提出问题的正确位置,但对于程序员来说,甚至没有标签命名约定(但命名标准)。关于命名空间和命名约定的讨论并不多。如果它是错误的,我可以移动我的问题。