草庐IT

通用化

全部标签

c++ - 通用函数指针

有些类有如下方法:intgetSomething1();std::stringgetSomething2();someClassgetSomething3();有描述此类字段的结构,例如:{"nameoffield",pointertogetter,std::type_info}那么我想按如下方式使用它:if(type==int){field_int=(int)getter();}elseif(type==std::string){field_string=(std::string)getter();}etc.如何改造getterslikeintgetSomething1();std:

c++ - 有没有一种通用的方法可以在 C++ 中的堆栈上保留状态变量?

在我目前正在处理的程序中,许多对象包含与对象一起持续存在的状态变量。例如表示3d模型中的点的对象可能包含一个变量来控制是否已选择该点进行编辑。通常,这些状态变量中的一个或多个将被一段代码临时修改,例如voidMyFunc();{mytypetemp=statevar;statevar=newvalue;DoSomething();statevar=temp;}这有问题,好像DoSomething()抛出异常,statevar没有正确恢复。我计划的解决方法是创建一个新的模板类来恢复其dtor中的值。有点像templateclassPushState{PushState(TYPEVar){

c++ - 通用模板化枚举空值

clang++提示变量未初始化:templatevoidfunc(){TEnumenumVar;//...if(something())enumVar=someValue();//...if(something())doSomethingWith(enumVar);//通常,为了避免这个警告,枚举可以有一个Unknown=-1值或类似的东西-但不幸的是,在这里枚举类型被用户传递为typenameTEnum,所以我不知道它是否包含“空值”。有什么办法可以解决这个问题吗?还是我应该忽略/禁止显示警告? 最佳答案 总是初始化,例如使用三元

c++ - 具有通用输入参数的函数

我对C++比较陌生。我编写了函数WriteToFile,它写入文本文件(路径由字符串a指定)二维数组(存储在0行主序,x行,y列):voidWriteToFile(std::stringa,constfloat*img,constintx,constinty){FILE*pFile;constchar*c=a.c_str();pFile=fopen(c,"w");for(inti=0;i现在我希望这个函数也能处理int和double数组。对于int,它只会按原样打印数字,对于double%5.10lf,必须在fprintf中使用。我知道,这是绝对可能的。我发现了一些类似的东西,但不知道

c++ - 如何将 std::bind 作为通用引用类型传递?

据我了解,std::bind完美地转发它包装的可调用对象和该可调用对象的参数;std::bind返回对象本身是可移动和/或可复制的,具体取决于可调用对象及其参数是否可移动和/或可复制;一个std::bind返回对象可能是嵌套的,在这种情况下,外部std::bind返回对象是可移动和/或可复制的,就像绑定(bind)其他可调用对象时一样。因此,我希望下面的代码片段可以正常编译。相反,代码在main()中的最后两个语句中生成了大量编译器错误。.#includetemplatevoidcall_handler(HandlerType&&handler){handler();}template

c++ - 如何将类型约束和隐式转换与 C++11 通用引用相结合?

在函数中我需要区分左值和右值引用,所以显而易见的路径是重载:voidmyfunc(A&&a);voidmyfunc(constA&a);这完全符合预期的行为,具有明确定义的类型和隐式转换。但是代码重复太多,我更愿意将相关的决定封装在里面,只保留一个函数,因此通过通用引用传递可能是一种选择:templatevoidmyfunc(A&&a);然而,这有一个不幸的缺点,即现在任何对象都可以作为第一个参数传递,因此可以通过enable_if施加约束:template::type>::type,A>::value,T>::type>voidmyfunc(T&&a);这似乎几乎可以完成工作,但是(

c++ - 用于解析 HTTP 请求的标准或通用 Arduino 库?

我正在尝试使用ArduinoEthernetShield获取我的Arduino设置为服务器以理解GET和POST请求。我找到了“WebServerwellstructured”,并且可以对其进行修改以满足我的需要,但是C++中是否已经存在一些非常轻量级的东西,并且可能已经普遍用于带有Arduinos以太网扩展板的Arduinos? 最佳答案 我用过Webduino与我的Arduino以太网屏蔽。它处理GET和POST请求,并读取查询字符串参数。 关于c++-用于解析HTTP请求的标准或通

c++ - 使用指针、引用、通用数据类型的句柄,尽可能通用和灵活

在我的应用程序中,我有很多不同的数据类型,例如Car,Bicycle,Person,...(它们实际上是其他数据类型,但这只是为了示例)。由于我的应用程序中也有一些“通用”代码,并且该应用程序最初是用C编写的,因此指向Car、Bicycle、Person的指针通常作为空指针传递给这些通用模块,一起带有类型标识,如下所示:CarmyCar;ShowNiceDialog((void*)&myCar,DATATYPE_CAR);“ShowNiceDialog”方法现在使用元信息(将DATATYPE_CAR映射到接口(interface)以从Car获取实际数据的函数)根据给定的数据类型获取汽车

c++ - 通用模板非类型参数

我希望我的类接收一个非类型模板参数,但我不想指定非类型参数的类型。我可以这样写:templateclassA{};然后可以按如下方式使用:Aa;这是多余的,因为一旦我知道param=3,那么我就知道Type=int。有没有什么方法可以这样写,以便以下所有行都可以编译和实例化不同的类型?Aa;Ab;Ac; 最佳答案 不,那是不可能的。所有非类型模板参数的类型都必须在参数中定义,并且永远不能从使用中推断出来,即当编译器分析时,您需要Type已知参数Typeparam。 关于c++-通用模板非

C++ 编译。翻译阶段#1。通用字符名称

我不明白它在C++标准中的含义:Anysourcefilecharacternotinthebasicsourcecharacterset(2.3)isreplacedbytheuniversal-character-namethatdesignatesthatcharac-ter.(Animplementationmayuseanyinternalencoding,solongasanactualextendedcharacterencounteredinthesourcefile,andthesameextendedcharacterexpressedinthesourcefile