草庐IT

可变性

全部标签

c++ - 如何编写丢弃其参数的通用可变参数 lambda?

我想编写一个lambda,它通过通用引用接受任意数量的参数并完全忽略它们。显而易见的方法是使用可变通用参数包的语法并省略参数名称:automy_lambda=[](auto&&...){return42;};在我trytopassanontrivially-copyableobject之前这工作正常(使用gcc4.9.2):structS{S(){}S(Sconst&){}};my_lambda("meow",42,S{});^error:cannotpassobjectsofnon-trivially-copyabletype'structS'through'...'这是怎么回事?我

c++ - 如何组合 lambda、可变参数函数和函数指针?

我有一个好主意,可以(对我而言)简化很多事情。假设您有一个函数,它接受一个带有x个参数的函数,如果事件发生,该函数将被执行。为了简化这一点,您使用typedef定义了一个新类型,即函数指针。typedefvoid(*HandlerFunction)(...);voidsetHandler(HandlerFunctionfun){...}现在您使用setHandler函数来...使用带有额外特定参数的lambda函数设置处理程序,因为您知道将始终使用这些特定参数调用此函数。setHandler([](inti,std::stringarg){std::cout现在的问题是……这在C++中

c++ - 使用 "using declaration"扩展非类型模板参数包(模板可变参数编译时 SignalSlot 实现)

对更好的标题有什么建议吗?在Qt中,信号和槽有一个很好的特性。但是,它会告诉您特定信号是否只能在运行时(afc)期间连接到特定插槽。打算:从模板创建一个包含“信号签名”(作为模板参数的函数指针)的类,以允许将给定签名(传递参数的数量和类型)的“插槽”仅连接到具有相似签名的“已定义”信号;必须简单易用。现在的问题:我在ISignalSlotMap类中遇到“使用声明”的编译错误。templatemultiplevariadicinheritancewithvariadicargumenttypes-在这里它编译得很好。还有,有什么办法可以简化模板算法吗?更新:第一个block可以在没有dl

unity c#application.openurl不使用可变输入

我正在建立一个Unity的应用程序,并且我有一个按钮Application.OpenURL()单击时,将用户带到特定页面。到目前为止,我一直使用Double引号中的完全输入URL名称作为OpenUrl函数的参数,并且它按照我的预期工作。当我按下按钮时,页面在浏览器中打开。为了合并多个可能的URL,我将参数更改为一个名为的字符串变量url_name。由于此更改,因此按下相同的按钮时什么都不会发生。我的代码目前看起来像这样:IEnumeratoralertPopUp(stringmetaData_Content){if(alertDelay){yieldreturnnewWaitForSecond

C++11:计算可变函数参数类型

假设您要编写一个函数,该函数将不透明句柄传递给未知类型的函数(例如,包含具有商定名称的函数的结构的名称),并将参数转发给该函数。在非可变参数的情况下,为简单起见考虑单参数函数,有两种方法可以做到这一点:您可以让转发函数接受任意类型的参数,并尝试用它调用转发函数,然后如果结果不兼容,编译器会在模板扩展期间提示;或者您可以使用decltype和其他各种机制来确定forwardee函数期望的参数类型,并明确要求该类型的参数。我不知道这些是否有公认的术语,所以我将它们称为“通过”和“预先”。passthrough方法可以直接泛化为具有任意数量参数的函数,但upfront方法不能。#includ

c++ - "empty"可变模板特化的地址

我有一个可变模板成员函数定义为:templateVAlgorithm*CreateAlgorithm(constchar*objectName,constchar*className,Params...par)我想获取Params不包含类型的专用版本的地址(我称之为“空”专用化),即:VAlgorithm*CreateAlgorithm(constchar*objectName,constchar*className)我尝试了几种方法。天真的方式:&AlgorithmFactory::CreateAlgorithm(因为,例如,&AlgorithmFactory::CreateAlgo

c++ - 在 openCV 中编写可变帧率视频

我在openCV中编写视频文件的步骤如下:CvVideoWriter*writer=cvCreateVideoWriter(fileName,CodecID,frameRate,frameSize);//CreateVideoWritercvWriteFrame(writer,frame);//WriteframecvReleaseVideoWriter(&writer);//Releasevideowriter上面的代码片段以固定的帧速率写入。我需要写出可变帧率视频。我之前在libx264中使用的方法涉及将单独的时间戳写入每个帧。所以,问题是如何将时间戳写入openCV中的帧-具体的

c++ - 将 int 数组转换为可变参数模板

假设我有一个像intarr[N]这样的整数数组然后说arr[i]来自一个很小的域(例如1-10)。假设我还有一个具有通用接口(interface)(抽象类)的可变参数模板类templateclassFooImpl:publicFoo{}问题是我如何实现一个功能:Foo*getFoo(intarr[N]);或者更好:Foo*getFoo(int*pint,intsize);这将返回FooImpl模板参数对应我的数组?例如arr={4,2,6,1}我会得到FooImpl 最佳答案 我找到了问题的答案。诀窍在于使用结构可变参数模板而不是我

将GREP结果放入可变

我对Bash脚本有问题。我有一个特定位置的文件列表。我只需要从中约会,然后将其与另一个日期进行比较。foriin*.gz;doecho$i|grep-Eo'[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'done以上是grep正确从文件名获得的日期正确,但仅在我使用时才echo。在其他情况下,我有错误。我努力了:tmp=$(echo$i|grep-Eo'[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}')也不起作用。有什么建议么?我会感谢小帮助!看答案我不会使用grep在这里利用bash内置的常规表达处理。for

c++ - 使用可变参数重载宏

我正在尝试构建一个宏M,它将扩展为两种可能性之一,具体取决于它是否具有一个或多个参数:M(x)应该扩展到f(x)同时M(x,"%d%d%d",1,2,3)应该扩展到g(x,"%d%d%d",1,2,3)函数签名在哪里f(intx);g(intx,constchar*fmt,...);有variousanswers如果参数计数已知,则关于宏的“重载”;然而,他们确定__VA_ARGS__长度的方法都只适用于有限的选定数字。是否有任何技巧可以使类似的方法适用于我的“一个参数/多个参数”的情况?注意:重载函数不是一个选项,因为在我的例子中,它们实际上是两个不同类的构造函数。