的我有一個項目的應用程序文件,並在這個項目中,我有兩個文件夾「的流行爲」和「behaviour2」動態編譯依賴的#define
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;
}
但是實現是不同的。
然後通過在 「app.cpp」 使用文件中的下一個代碼 「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)
我可以寫
#include "behavior_type.h"
#include INCLUDE_FILE(hook/action.h)
...
AbstractAction* action = new Action();
action->Execute();
但在這種情況下,兩個「行動。 h(來自行爲1和行爲2)將被編譯。我只想編譯一個,我也包括在內。是否可能 僅使用源代碼(即我的INCLUDE_FILE指令)編譯一個「action.h」文件,而不編譯器屬性。
可能是這個問題很愚蠢,對不起,但我是一個新手在這裏。 謝謝。
這聽起來像一個不可維護的方法。爲什麼不製作兩個不同的課程?然後用類似「戰略模式」的東西來挑選合適的班級? – CoryKramer
你不想接口和一個Factory類(或函數)。 –
使用構建工具指定要構建的內容可能更容易:QMake,CMake或普通的舊Make。 –