在 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/