首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据#define动态编译文件

根据#define动态编译文件
EN

Stack Overflow用户
提问于 2016-07-05 16:33:04
回答 1查看 65关注 0票数 1

我有一个项目应用程序,在这个项目中我有两个文件夹"behavior1“和"behaviour2”

代码语言:javascript
复制
Application
|_ behaviour1
| |_ action
|   |_ action.h
|   |_ action.cpp
|
|_ behaviour2
| |_ action
|   |_ action.h
|   |_ action.cpp
|
|_ behaviour_type.h
|_ app.cpp

其中,每个目录中的action.h定义了一个来自抽象类的派生类

代码语言:javascript
复制
class AbstractAction {
   public:
       virtual ~AbstractAction() = default;
       virtual void Execute() = 0;
}

但是实现是不同的。

然后使用文件"behaviour_type.h“中的下一段代码

代码语言:javascript
复制
#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“里我可以写

代码语言:javascript
复制
#include "behavior_type.h"
#include INCLUDE_FILE(hook/action.h)
...
AbstractAction* action = new Action();
action->Execute();

但在这种情况下,将编译两个“action.h”(来自behavior1和behavior2)。我只想编译一个,这是我包括的。可以只使用源代码(即我的INCLUDE_FILE指令)编译一个"action.h“文件,而不是使用编译器属性。

也许这个问题很傻,对不起,但我是这里的新手。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-05 16:56:07

我不知道宏要做什么或者应该实现什么,但是为什么不使用简单的变体:

代码语言:javascript
复制
#ifdef ACTION_1
    #include "behaviour1/hook/action.h"
#else
    #include "behaviour2/hook/action.h"
#endif

AbstractAction* action = new Action();
action->Execute();

尽管如此,我完全支持这样的意见,即你应该两者兼而有之,并使用某种模式而不是条件编译。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38208437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档