如何在保持“干净”api的同时拥有多个命名空间?名称空间组成

时间:2013-07-27 04:33:16

标签: c++ api namespaces

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


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

我觉得名称空间(偶尔嵌套的名称空间)对于组织代码很有用,但确保使用world::europe::spain::madrid之类的东西变得很麻烦。因此,从API的角度来看,在同一名称空间中使用大多数代码(就像std库一样)效果最好。

我的问题是两个方面:

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

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

  3. 关于问题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;
    }
    

0 个答案:

没有答案