jjzjj

variadic-macros

全部标签

c++ - 修改 qmake 文件以构建多个目标以与 '#IFDEF macro' 一起使用

我想修改我的Qt项目的qmake文件,使其构建我的程序的两个版本:一个定义了SOME_FLAG,一个没有定义。根据#ifdefSOME_FLAG的结果,我的代码会有不同的行为。这可能吗? 最佳答案 据我所知,qmake只允许一个TARGET,只有一个异常(exception)。也就是说,如果您想要构建调试版本和发布版本,则可以使用相同的项目文件来构建两者。这样,您还可以分别为每个构建指定DEFINES。请记住,您可以在事后使用strip命令删除调试,也许这对您的情况有用。Qt4HTML文档(查看它们是否安装在您的系统上)描述了qma

c++ - "-D__STDC_FORMAT_MACROS"gnu 编译器选项

我正在清理我的Makefile并试图了解那里实际发生了什么。我遇到了上述选项。它必须启用一些宏来保证与旧C库的兼容性,但我找不到它的用途。gnu编译器(g++)选项是什么g++-D__STDC_FORMAT_MACROS意思还是做?g++甚至有必要吗?PS:我在Linux下工作 最佳答案 感谢Nick的链接,我得出结论,g++不需要它。它与C的inttype.h和printf有关。来自链接Inparticular,thesymbol__STDC_FORMAT_MACROS,mentionedinfootnote182oftheCst

C++ variadic 可变参数模板参数的数量

有一个可变参数模板很简单,我可以专门化它所以它只接受TStringConstant那是一个string_constant一些char小号:templateclassentry;templateclassentry,TValue>{}如果我想创建一个模板类来接受可变数字TStringConstant不同的chars,有办法吗?也许使用模板模板参数?因此以下所有内容都是有效的:entry_list,string_constant>();entry_list,string_constant,string_constant>();entry_list>();如果它会拒绝则奖励entry_lis

c++ - Variadic 模板元编程 : a bug in clang++ or g++?

考虑这种将数组从一种类型转换为另一种类型的疯狂的可变参数模板:#include#includetemplateclassConverter{public:template::type>staticconstexprconststd::arrayconvert(constArraysource,constTypes&...values);template::type>staticconstexprconststd::arrayconvert(constArray,constTypes...values);};templatetemplateconstexprconststd::array

c++ - 具有 "placeholder"值的宏

我正在使用一个包含一组预处理器库的库。其中之一是FOR_EACH样式的宏,它遍历__VA_ARGS__并为每个参数调用用户提供的宏。用户提供的宏调用如下:SOME_MACRO(current_arg)但是,问题在于它只适用于采用单个参数的用户提供的宏。我正在尝试做一些特别的事情,它涉及struct的名称和结构中的每个字段。问题是,这需要宏的两个参数。由于我正在使用的库只接受一元宏,是否有某种方法可以将附加参数“绑定(bind)”到我的宏?截至目前,我必须在我的宏中硬编码结构的名称。所以,如果我正在使用的struct被命名为Foo,我不得不说:#defineMY_MACRO(FIELD)

c++ - 将宏名称传递给 X-Macro 列表是否合法

我想到以下是X-macro的更可取的样式技巧:#defineLIST_OF_COLOURS(X)\X(RED)\X(GREEN)\X(BLUE)#defineLIST_OF_FRUIT(X)\X(APPLE)\X(ORANGE)\X(TOMATO)具体来说,将X宏传递给列表,而不是在每次实例化列表时取消定义并重新定义它。这允许:#defineX_LIST(x)x,#defineX_STRING_LIST(x)#x,#defineCOMPREHENSIVE_SETUP(n,l)\enumn{l(X_LIST)};\charconst*n##Names[]={l(X_STRING_LIST

c++ - Variadic 模板和 "expected a type"错误

我正在(主要是出于学习目的)自己实现tuple,我刚刚遇到了一个问题。我有以下代码:namespaceRose{templatestructRemoveReference{typedefTType;};templatestructRemoveReference{typedefTType;};templateclassTuple;templateclassTuple{public:Tuple(Firsta,Elems...more):More(more...),Element(a){}Tuple&operator=(constTuple::Type,RemoveReference::Ty

c++ - Variadic 模板类,从其参数列表中获取特定类型的索引

是否可以实现一个可变参数模板类的函数成员,该函数成员返回可变参数列表中给定类型的索引。我看到的问题是创建某种伪造的可变参数列表,只是为了触发编译时模板评估。templateclassFoo{templateint_get_idx(inti,constTArg&curr,TArgs...args){if(std::is_same(T,TArg)){returni;}else{returnget_id(i+1,args...);}}用法类似于:Foofoo;inti=foo.get_idx();//i==1 最佳答案 你可以使用类似的东

c++ - 用于创建结构的可变参数宏

我怎样才能写一个像这样使用的宏(用于gcc):CREATE_STRUCT(my_struct1,foo);CREATE_STRUCT(my_struct2,foo,bar);并扩展为structmy_struct1{std::stringfoo;};structmy_struct2{std::stringfoo;std::stringbar;};?我当然需要不同数量的成员的灵active,但对我来说已经很少了(大约4或5)。我发现了几个相关的问题,例如this和this,但是当我试图对这个问题应用这种神秘的宏魔法时,我完全迷失了。PS:我知道如何编写5个宏(每个参数一个)来完成这项工作

c++ - 使用宏迭代生成函数声明

我正在尝试使用宏生成函数声明/*goal:generateintf(inta,floatb)*/templatestructptype;templatestructptype{typedefPtype;};#defineNAMEe#defineCOMMAe#defineCOMMA,#defineNAME(N)NPARAMS#definePARAMS(P,...)COMMA##__VA_ARGS__PNAME##__VA_ARGS__#definePARAM_ITER(P)PNAME#definePROTO(R,N,P)\ptype::typeN(PARAM_ITERP(,e))PROT