variadic-macros

    4熱度

    1回答

    我想要做一些宏「重載」,以便MACRO(東西),得到不同於MACRO(東西,其他)的擴展。 使用一個片段,我從here了(我不知道這是否是100%便攜式),並從升壓PP圖書館的一些功能,我能使其工作:d現在 //THESE TWO COUNT THE NUMBER OF ARGUMENTS #define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N

    7熱度

    2回答

    我目前正在計算傳遞給函數的參數的總大小(以字節爲單位)。理論上,每個參數都可以寫出sizeof(x)。但是,如果想爲許多功能做這件事,這是一個巨大的浪費時間。我試圖找出參數的空間量,以便我可以分配適量的內存來存儲它們並存儲它們(對於具有混合類型的各種函數)。 我正在尋找一個表達式,可以確定所有參數的大小,以一個非變量函數,無論他們的名稱和無論有多少(在理由,我很好,只支持現在有64個參數)。它可以

    0熱度

    1回答

    我有一些模板函數由於模板類型而具有不同數量的參數。這個函數是用宏定義包裝的。 #define SomeTemplate(TemplateType, Arguments) someFunc<TemplateType>(Arguments); 當我只使用一個參數進行函數調用時,一切都可以,但我需要更多。我看着它推動通過不同的宏定義做這樣的事情,這樣的: #define TEMP_1(Arg1) s

    33熱度

    3回答

    考慮以下代碼: #define F(x, ...) X = x and VA_ARGS = __VA_ARGS__ #define G(...) F(__VA_ARGS__) F(1, 2, 3) G(1, 2, 3) 預期的輸出是X = 1 and VA_ARGS = 2, 3兩個宏,這就是我與海灣合作委員會獲得,但是,MSVC擴展了這個爲: X = 1 and VA_ARGS = 2

    5熱度

    2回答

    GCC抱怨,如果我這樣做: #define M(obj,met, ..., contents) obj##_##met(const void * self, __VA_ARGS__) { \ contents \ } 給予我這些原因有二: error: missing ')' in macro parameter list warning: __VA_ARGS__ can

    2熱度

    1回答

    我嘗試獲取發送給可變宏的第一個實際參數。這是我試過了,這不VS2010工作: #define FIRST_ARG(N, ...) N #define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__)) 當我看到預處理器輸出我看到FIRST_ARG返回發送到MY_MACRO整個參數列表... 另當我嘗試使用時: FIRST_ARG(1,2,3) 它

    7熱度

    3回答

    考慮這個宏: #define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ > 當與零個參數使用它產生壞的代碼,因爲編譯器期望逗號之後的標識符。事實上,VC的預處理器足夠聰明,可以刪除逗號,但GCC不是。 由於宏不能超載,好像它需要一個單獨的宏這種特殊情況下得到它的權利,如: #define MAKE_TEMPLATE_Z() tem

    13熱度

    6回答

    我在通話宏觀工作, #define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__)) ,要求時, CALL(print,2,3,4,5); 增加2 3 4 5到鏈​​表(,超載這樣做),並呼籲打印預計鏈接列表,如預期般運作如何有一些不需要參數的呼叫, CALL(HeapSize); 它仍然需要一個鏈接列表,但一個

    11熱度

    3回答

    創建可變宏指令的訣竅是什麼?它會擴展到FOOn(a1, a2, a3,..., an)的值爲n在您選擇的任何預先選定的有界範圍內?也就是說,FOO(a)應該擴大到FOO1(a),FOO(a, b, c)到FOO3(a, b, c)等我知道有一個標準的技巧,但我似乎無法找到它。 請隨時將此問題標記爲重複項,如果答案還有其他問題,請將其關閉。我懷疑有但我找不到它。

    4熱度

    1回答

    我正在使用包含一組預處理器庫的庫。其中之一是FOR_EACH風格宏,它遍歷__VA_ARGS__併爲每個參數調用用戶提供的宏。提供宏觀的用戶稱爲像:SOME_MACRO(current_arg) 然而,問題是,它僅與採取單參數用戶提供的宏的作品。我試圖做一些特殊的事情,其中​​包括struct的名稱和結構中的每個字段。問題是,這需要宏的兩個參數。 由於我正在使用的庫只接受一元宏,有沒有辦法將一個額