2

我正在制作一个静态库,其中定义的所有内容都在一个命名空间中。但我不确定我是否应该像定义一个类一样定义方法,或者也将它们包装在命名空间中。我要问的是:

这是否有效:

我的东西.h

namespace MyThings {
    void DoStuff();
    void DoOtherStuff();
}

我的东西.cpp

namespace MyThings {
    void DoStuff() {
        // Do this.
    }

    void DoOtherStuff() {
        // Do that.
    }
}

或者,我应该像定义类方法一样定义它吗?:

我的东西.cpp

void MyThings::DoStuff() {
    // Do this.
}

void MyThings::DoOtherStuff() {
    // Do that.
}

我宁愿不使用using namespace MyThings;,如果它有效,我宁愿使用我的第一个示例,我觉得它使代码更具可读性,而不必MyThings::在每个方法标识符之前使用。

4

1 回答 1

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.
    }
}

那么在另一个源文件中的某人尝试调用该函数并且链接器抱怨之前,您通常不会收到错误消息。显然,如果您的测试不是垃圾,您会以一种或另一种方式捕获错误,但越快通常越好,您可能会从编译器获得比链接器更好的错误消息。

于 2012-10-05T10:23:34.060 回答