1

编辑:这对我来说似乎并不重复,因为这个问题的范围更广(如何使用它)。无论如何,我的问题的答案确实存在于 paercebal 的答案中,并且是namespace composition。SO中的另一个相关来源是this other question


我一直在尝试使用命名空间来模块化我的代码。Anon 对嵌套命名空间问题的回答让我想知道它们是否应该用于设计而不是简单地避免名称冲突。

我觉得命名空间(有时是嵌套的)对于组织代码很有用,但肯定会world::europe::spain::madrid变得使用起来很麻烦。因此,从 API 的角度来看,将大多数代码放在同一个命名空间中(就像std库一样)效果最好。

我的问题是两个方面:

  1. 命名空间应该用于组织代码还是仅仅为了避免名称冲突?如果是这样

  2. 如何在保持 API 干净的同时拥有“复杂”的命名空间结构?

关于问题2,我一直在使用以下策略:

(1) 有一些代码有自己的命名空间

//mathlib.h

namespace mathlib {
    int sum( int a, int b ) {
        return a + b;
    }
}

(2) 并将其带入另一个命名空间

//otherlib.h

#include <iostream>
#include "mathlib.h"

namespace otherlib {
    using namespace mathlib; // lookup stuff inside mathlib

    void print(int n) {
        std::cout << "the int is " << n << "!";
    }
}

(3) 所以我实际上可以在命名空间sum下调用它otherlib

#include "otherlib.h"

int main(){
    auto myint = otherlib::sum(1, 2);
    otherlib::print(myint);
    return 0;
}
4

0 回答 0