我有一个项目应用程序,在这个项目中我有两个文件夹"behavior1“和"behaviour2”
Application
|_ behaviour1
| |_ action
| |_ action.h
| |_ action.cpp
|
|_ behaviour2
| |_ action
| |_ action.h
| |_ action.cpp
|
|_ behaviour_type.h
|_ app.cpp其中,每个目录中的action.h定义了一个来自抽象类的派生类
class AbstractAction {
public:
virtual ~AbstractAction() = default;
virtual void Execute() = 0;
}但是实现是不同的。
然后使用文件"behaviour_type.h“中的下一段代码
#define CURRENT_BEHAVIOUR bevahiour1
#define QUOTEME_1(x) #x
#define QUOTEME(x) QUOTEME_1(x)
#define INCLUDE_FILE(x) QUOTEME(CURRENT_BEHAVIOUR/x)在"app.cpp“里我可以写
#include "behavior_type.h"
#include INCLUDE_FILE(hook/action.h)
...
AbstractAction* action = new Action();
action->Execute();但在这种情况下,将编译两个“action.h”(来自behavior1和behavior2)。我只想编译一个,这是我包括的。可以只使用源代码(即我的INCLUDE_FILE指令)编译一个"action.h“文件,而不是使用编译器属性。
也许这个问题很傻,对不起,但我是这里的新手。谢谢。
发布于 2016-07-05 16:56:07
我不知道宏要做什么或者应该实现什么,但是为什么不使用简单的变体:
#ifdef ACTION_1
#include "behaviour1/hook/action.h"
#else
#include "behaviour2/hook/action.h"
#endif
AbstractAction* action = new Action();
action->Execute();尽管如此,我完全支持这样的意见,即你应该两者兼而有之,并使用某种模式而不是条件编译。
https://stackoverflow.com/questions/38208437
复制相似问题