我想要做的就是使用宏來生成類名,它需要一些concat,就是這樣。除了它慘敗之外。這真的磨礪我的齒輪。多級c/C++宏 - 評估結果後的空白?
我有一個宏定義在什麼地方...
#define CLASSNAME myclassname
...
,我試圖讓一個類名生成與類型...
#define GETNAME(x) x
#define UNIQUENAME(T) GETNAME(CLASSNAME) ## _ ## T
UNIQUENAME(int) //I want it to make: myclassname_int
// instead it makes: myclassname _int
// SUBTLE, but screws everything up! can't have that space in the middle.
我檢查了另一種配置..
#define UNIQUENAME(T) GETNAME(CLASSNAME)M ## M_ ## T
//which returns: myclassname MM_int
所以這個空間肯定來自GETNAME結果。唯一的問題是,我不知道如何擺脫它。我已經嘗試了太久了。
任何事情都會有幫助。 謝謝!
如果您使用的是C++,那麼不要將它標記爲C.如果您使用的是C++,那麼您可以避免使用宏。然後你可以使用編譯器的安全功能,在這些方面更好。你聽說過模板嗎?如果我理解正確,可能是您問題的最佳解決方案 –
是的,那正是我想要的。模板。不幸的是,我使用的編譯器只支持C++的一個子集,並且沒有模板。所以我用宏來製作它們。除了生成的類名中間的那個愚蠢的空間之外,我有一切工作。據我所知,預處理器是相當標準的(除了空間)。 – extracrispy
代替使用宏的路線,寫一個腳本(perl等)來根據需要爲各種類型生成頭文件和源文件。這只是一個簡單的替代。 –