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的名称和结构中的每个字段。问题是,这需要宏的两个参数。 由于我正在使用的库只接受一元宏,有没有办法将一个额