C++ &引用;包括为;在C++;

C++ &引用;包括为;在C++;,c++,include,C++,Include,我得到了一堆文件夹,每个文件夹中都有一个.cc和一个头文件。所有文件夹中文件的实际名称都相同。因此,对于两个文件夹,结构应为: . ├── f1 │   ├── SomeClass.cc │   ├── SomeClass.h └── f2 ├── SomeClass.cc └── SomeClass.h 不幸的是,在每种情况下,SomeClass的实现略有不同,我需要在一个文件中包含所有不同的实现。在Python中,我可以执行以下操作 from .f1.SomeClass

我得到了一堆文件夹,每个文件夹中都有一个.cc和一个头文件。所有文件夹中文件的实际名称都相同。因此,对于两个文件夹,结构应为:

.
├── f1
│   ├── SomeClass.cc
│   ├── SomeClass.h
└── f2
    ├── SomeClass.cc
    └── SomeClass.h
不幸的是,在每种情况下,SomeClass的实现略有不同,我需要在一个文件中包含所有不同的实现。在Python中,我可以执行以下操作

 from .f1.SomeClass import SomeClass as FirstImplementation
 from .f2.SomeClass import SomeClass as SecondImplementation

是否有一个等价的C++?

尝试将它们包含在不同的命名空间中:

创建您的SomeClass。h:

namespace SomeClass1
{
#include "f1/SomeClass.h"
}

namespace SomeClass2
{
#include "f2/SomeClass.h"
}
并创建您的SomeClass.cc:

namespace SomeClass1
{
#include "f1/SomeClass.cc"
}

namespace SomeClass2
{
#include "f2/SomeClass.cc"
}
但是您需要确保这四个文件包含的所有头都包含在名称空间之前。例如,如果它们包括
“someHeader.h”
,则需要在
命名空间SomeClass1
之前包含这些头:

#include <string>
#include <vector>
#include "SomeHeader.h"

namespace SomeClass1
{
...
现在编译.cpp文件,而不是两个原始文件:

g++ -std=c++11 main.cpp SomeClass.cpp -o main

希望这些类存在于某个名称空间中,如果您没有遇到任何问题,不幸的是它们没有。如果您受其他源的控制,则添加一个名称空间。这是你寻找的C++等价物……是的,这是个问题。我不是,也不仅仅是两个文件夹。我的意思是我可以写一个脚本来手动添加名称空间,但这会很难看,我希望会有一个更好的方法。嗯,这与我对受控的定义不太相符,如果你可以写一个脚本来这样做的话。。。根据我的说法,你不是e。G这些文件来自某个存储库(SVN、GIT),不允许您添加名称空间,因为这会破坏其他地方的一些代码…这也是我的方法-我会对每个.h和.cc文件分别执行此操作,不过…@Aconcagua也可以分别执行。在我看来,最重要的一点是确保其他标题不包括在名称空间中。对于我来说
g++-std=c++11 main.cpp f1/SomeClass.cpp f2/SomeClass.cpp-o main
会导致
SomeClass.cpp:(.text+0x0):SomeClass::SomeClass(std::string)
@Lxndr这正是不允许的!您需要首先将类放入不同的名称空间,然后将包装文件传递给gcc,而不是原始文件@Lxndr无法编译f1/SomeClass.cpp和f2/SomeClass.cpp。您需要创建包含这些内容的新cpp(可能还有h)文件,您应该改用新文件。
g++ -std=c++11 main.cpp SomeClass.cpp -o main