草庐IT

VARIADIC

全部标签

c++ - 在 C++11 的模板化函数中处理 void 变量

我有一个模板类,它必须在调用一个参数和返回类型都是通用的函数之前执行一些操作。这是方法:templateReturnTypefunction(Args...args){//prepareforcall//...ReturnTyperv=makeCall(args...);//[1]//dismissthecall//...returnrv;}当然在ReturnType时编译正确不是void.当我在这种情况下使用它时:function(firstArg,secondArg);编译器响应error:return-statementwithavalue,infunctionreturning

c++ - 使用 Variadic 模板解包参数列表

我正在尝试围绕使用不透明数据类型的旧C-API创建一个C++便捷包装器。有一个特定的C函数采用格式字符串,以及使用C的可变数量的参数。设施。作为包装器的一部分,我希望能够将任意数量的参数(包括C++对象)传递给此函数。但是,由于很明显设施不能处理非POD数据,我创建了一个模板化转换函数,它将C++对象(如std::string)转换为POD等价物。我认为使用C++0x可变参数模板这整件事将是一个简单的练习,但我很难弄清楚如何以正确展开参数包的方式编写此函数,同时将我的转换函数应用于每个争论。我目前拥有的是:templatevoidapply(OPAQUE*object,constcha

c++ - 具有可变模板参数的函数指针

引用下面的代码,有人能想出如何适配吗templateRETMediator::change(Object*o,RET(Object::*f)(ARGS1...),ARGS2&&...args){conststd::tuplet(args...);for(Object*x:objects)(x->*f)(std::get(t),o->rating,std::get(t),o->str);}这样我就不必每次更改ARGS2...时都重写不同的版本。我不介意在参数仅包含4个参数的情况下这样做,但您可以想象,如果参数远大于4,则需要泛化。ARGS1中的类型...应包含不同的类型,所以应该有一种方

c++ - 使用可变参数模板的多键映射

我正在尝试使用C++中的可变参数模板实现具有不同访问键的映射。我想要得到的是让这样的语法起作用:MultikeyMapmap1;//intanddoublearekeys,floatisvaluetypemap1[2]=3.5;map1[5.7]=22;MultikeyMapmap2;//morekeys,intisvaluetypemap2[100000000000ULL]=56;//etc...我现在的样子:templateclassMultikeyMap;templateclassMultikeyMap:protectedstd::map,protectedMultikeyMap

c++ - 检查参数包是否包含类型

我想知道C++0x是否提供任何内置功能来检查可变参数模板的参数包是否包含特定类型。今天,如果您使用boost::mpl::vector作为可变参数模板的替代品,则可以使用boost::mpl::contains来完成此操作。但是,它有严重的编译时开销。我想,C++0x对std::is_same有编译器级别的支持。所以我在想编译器是否也支持像下面这样的泛化。templatestructis_present{enum{value=(WhatinArgs...)?1:0};}; 最佳答案 幸运的是,C++标准已经发展。使用C++1zaka

C++11:Variadic模板函数参数包扩展执行顺序

考虑以下代码:templatesize_tf(Tt,size_t&x){returnx++;}templatevoidg(Args...args){size_tx=0;size_ty[]={f(args,x)...};for(size_ti=0;iC++11标准保证断言不会触发吗?为什么或为什么不? 最佳答案 是的,它保证不会开火。请参阅以下引述:§14.5.3可变模板:Packexpansionscanoccurin[...]aninitializer-list;thepatternisaninitializer-clause.§

c++ - 如何找到参数包的长度?

假设我有一个像这样的可变参数模板函数templateunsignedlength(Args...args);如何使用长度函数找到参数列表的长度? 最佳答案 使用sizeof...:templateconstexprstd::size_tlength(Args...){returnsizeof...(Args);}注意你不应该使用unsigned,但是std::size_t(在中定义)。此外,该函数应该是一个常量表达式。不使用sizeof...:namespacedetail{templateconstexprstd::size_tl

c++ - 模板元编程 : multiplying a bunch of template arguments

我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案:templatestructmul_all{staticconstexprstd::size_tvalue=n1*mul_all;};templatestructmul_all{staticconstexprstd::size_tvalue=1;};问题是每次我必须像这样将0提供给模板参数到我的结构中intmain(){std::cout::value::value;return0;}是否有任何解决方法来读取最后一个零?注意:我是TMP的初学者。 最佳答案

ios - 如何在 Objective-C 中使用可变参数方法定义宏?

我尝试调用的方法是;-(void)addLogWithLevel:(MDCLogLevel)logLevellogContent:(NSString*)logContent,...{va_listargs;va_start(args,logContent);NSString*message=[[NSStringalloc]initWithFormat:logContentarguments:args];va_end(args);MDCLog*log=[MDCLoglogWithContent:messagecontent:logLevel];[self.deviceLogsaddObj

c++ - Variadic 可变模板模板参数

有没有一种简单的方法来获得可变可变模板模板参数。例如考虑以下函数签名templateclassPack,typenameT,size_t...Args>voidfoo(constPack&a);如果我们想传递两个Pack,我们现在必须做一个重载templateclassPack,typenameT,size_t...Args0,size_t...Args1>voidfoo(constPack&a,constPack&b);现在,如果我们想传递可变数量的Pack对象并使用不同的可变参数,该怎么办?Args0...,Args1...,Args2...。所以我在想是否有一种实用的方法可以按照