0
我正嘗試在遞歸宏/預處理器指令的幫助下生成一個類。我無法使用模板,因爲我正在構建類型(一個類)。宏用戶必須能夠創建此類而不重複變量。我不想爲變量使用容器,因爲它們可以具有有意義的名稱。帶有預處理器指令的C++類世代
class IInterface;
class XYZ
{
int Mark1, Mark2, Mark3 /* variables to be passed */;
int count;
XYZ(IInterface * I)
{
count = 0;
// initialization values to be passed
Mark1 = 10; count++; I -> add(Mark1);
Mark2 = 20; count++; I -> add(Mark2);
Mark3 = 30; count++; I -> add(Mark3);
}
};
我想放置位置,然後展開它們。
#define CLASS(_name) class _name {\
int VARS; \
int count; \
_name(IInterface * I) \
{ \
count = 0; \
VAR = val; count++; I -> add(VAR); \
} \
};
#define INIT // expansion code
CLASS(XYZ)
INIT(Mark1, 10) // variables should be sent only once for all the placeholders
INIT(Mark2, 20)
INIT(Mark3, 30)
如何擴展INIT
來替換佔位符? 我想知道這是否可行/建議。
爲什麼你會這樣做,而不是使用繼承? – TartanLlama 2014-09-10 09:54:09
爲什麼不使用'std :: vector'或'std :: array'或'std :: map'? – Jarod42 2014-09-10 09:56:21
聽起來就像你試圖使用預處理器來定義你自己的編程語言的語法。您是否考慮過使用腳本語言(例如python或perl)爲您生成源文件,作爲make過程的預編譯步驟的一部分? – 2014-09-10 09:58:13