c++ - 如何在C++中将多个文件包装到同一个命名空间中

标签 c++ c++11 namespaces preprocessor-directive

在 C# 中,将所有类放入唯一的命名空间中非常简单。我简单地了解命名空间在 C++ 中的工作原理。但是,当将许多文件放在一起以显示为一个命名空间时,我真的很困惑。 可能是这样的:

/* NetTools.cpp
blade 7/12/2014 */
using namespace std;
using namespace NetTools;
#include "NetTools.h"

int main()
{
   cout << "testing" << endl;
   return 0;
}
//####### EOF

/* NetTools.h 
blade 12/7/2014 */

#ifndef NETTOOLS_H
#define NETTOOLS_H

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

namespace NetTools
{

}

#endif
// #### EOF

/* Commands.h
blade 7/12/2014 */

#include "NetTools.h"
#ifndef COMMANDS_H
#define COMMANDS_H

namespace NetTools
{

}

#endif
// ###### EOF

我将 .h 文件中的每个类声明与其 cpp 文件中的实现分开,但我希望所有内容都位于同一命名空间中。

最佳答案

您所展示的效果很好。

命名空间的一个基本属性是,如果不同的文件都在命名空间中声明具有相同名称的内容,则编译器/链接器知道将这些内容放在一起,以便您获得一个命名空间,其中包含所有文件中定义的所有内容。

例如:

// file a
namespace A {
    class X;
}

// file b
namespace A {
    class Y;
}

// file c
namespace A {
    class Z;
}

...主要相当于:

// one file
namespace A {
    class X;
    class Y;
    class Z;
}

匿名命名空间是个异常(exception)。匿名 namespace 是按文件分隔的。例如:

// file a
namespace {
    void f();
}

// file b
namespace {
    int f();
}

这些并不冲突,因为每个文件都有自己唯一的匿名命名空间。

关于c++ - 如何在C++中将多个文件包装到同一个命名空间中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712098/

相关文章:

c++ - 错误3错误LNK2019 : unresolved external symbol "public: void __thiscall

c++ - 如何迭代指针指向的对象列表?

c++ - 绘制复杂优化的进度

c++ - 使用默认参数消除函数歧义

c++ - 如何将自定义分配器的完全相同状态传递给多个容器?

c++ - 在 C++ 中整理我的命名空间

c# - 如何从 Visual Studio 中的 using 语句中查找 DLL

C++:在匿名命名空间中声明函数原型(prototype)的正确方法是什么?

c++ - 绑定(bind)到 C++ 模板中非常量引用的常量参数

c++ - 从 CSV C++ 中提取 double 值时出现意外结果