我得到了一堆文件夹,每个文件夹中都有一个.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++是否有等效功能?

最佳答案

尝试将它们包括在不同的 namespace 中:

创建您的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"
}

但是,您需要确保在命名空间之前包含这四个文件包括的所有 header 。例如。如果它们包含<string><vector>"someHeader.h",那么您需要在namespace SomeClass1之前包括以下 header :
#include <string>
#include <vector>
#include "SomeHeader.h"

namespace SomeClass1
{
...

然后尝试在您的代码中使用它们:
//instead of #include "f1/SomeClass.h"
#include "SomeClass.h"

SomeClass1::SomeClass c1;
...
SomeClass2::SomeClass c2;
...

现在,您将编译.cpp文件,而不是两个原始文件:
g++ -std=c++11 main.cpp SomeClass.cpp -o main

关于c++ - C++中的“Include as”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43799070/

10-13 04:11