我正在研究一個微處理器(Arduino)項目。我的庫Foo
從現有的庫Basic
繼承。後來我將Basic
的功能擴展到另一個類Advanced
。然而,Advanced
更難擴展硬件,使得其中一個已經制作的演示無法使用。C++:有條件繼承可能
我在想什麼的是如下:
class Foo:
#ifndef USE_BASIC
public Advanced
#else
public Basic
#endif
{
...
}
在我的演示代碼
並把#define USE_BASIC
:
#define USE_BASIC
#include <Foo.h>
但是富不從基本繼承。我在這裏做錯了嗎?或者如果有替代方案來解決這個問題?
您必須在包含'Foo.h'的每個翻譯單元(.cpp +包含的標題)中定義'USE_BASIC',在'#include'指令之前。考慮使用編譯器開關(在每個翻譯單元中自動聲明「USE_BASIC」)或將#define定義在標題中。 –
dyp
2013-05-03 12:24:39
@Named我不同意。頭文件沒有特別之處,OP顯示了在包含頭文件之前定義'USE_BASIC'的例子。編譯器在cpp上運行,因此預處理器首先看到_then_包含頭部(在OP的例子中)。 – dyp 2013-05-03 12:29:05
我無法理解-1。 – 2013-05-03 13:04:47