我正在创建一个静态库,其中定义的所有内容都在一个命名空间中。但我不确定是否应该将方法定义为类,或者将它们包装在命名空间中。我问的是:
这是否有效:
MyThings.h
namespace MyThings {
void DoStuff();
void DoOtherStuff();
}
MyThings.cpp
namespace MyThings {
void DoStuff() {
// Do this.
}
void DoOtherStuff() {
// Do that.
}
}
或者,我应该像定义方法那样定义它吗?:
MyThings.cpp
void MyThings::DoStuff() {
// Do this.
}
void MyThings::DoOtherStuff() {
// Do that.
}
我不想使用using namespace MyThings;
,如果它有效,我宁愿使用我的第一个示例,我觉得它使代码更具可读性,而不必在每个方法标识符之前使用MyThings::
答案 0 :(得分:9)
两者都有效,所以你可以根据口味选择你的风格。
使用以下方法定义函数有一个广告优势:
void MyThings::DoStuff() {
// Do this.
}
为了做到这一点,必须已经声明了该函数。因此,错误如:
void MyThings::DoStuf() {
// Do this.
}
或
void MyThings::DoStuff(int i) {
// Do this.
}
编译MyThings.cpp
时会捕获。如果你定义
namespace MyThings {
void DoStuff(int i) {
// Do this.
}
}
然后你通常不会得到错误,直到另一个源文件中的某个人试图调用该函数,并且链接器抱怨。显然,如果你的测试是非垃圾,你会以某种方式捕获错误,但更快通常会更好,你可能会从编译器中获得比链接器更好的错误消息。