xp系统停止服务怎么办-excel图表制作
2023年4月3日发(作者:高德离线地图)
C++11中可变参数个数的模板(variadictemplate)
C++11正式标准是2011年就出来了,前⼀段时间就听说它增加了不少功能,但⼀直没⽤到它。直到最近需要⽤到可变参数
个数的模板,⽤之前的语法很累赘也存在缺陷,这时查看C++11发现有我需要的类似功能。下⾯是我做的⼀点尝试。
VS2012⽀持C++11中的部分标准,其中包括可变参数个数的模板(variadictemplate),但必须安装微软在2012年11
⽉出版的vc_编译器(这个可以在微软官⽹下载)。
⾸先,我⽤的安装包是VS2012_ULT_,解压之后直接点击安装程序进⾏安装,全部默认配置,花费6G多的空间,
顺利安装成功。然后,⽤新建个“控制台⼯程”,⾥边“cout<<"xxx"<
openincludefile:'SDKDDKVer.h'”。(这个我不知道是什么原因,可能与我之前安装的VS2010有关,或者VS2012
需要Win8的库⽀持)
⽹上找到解决办法,需要安装WindowsDriverKit(WDK)8ConsumerPreview:。默认路径安装后,在项⽬配置中包含
WDK的头⽂件⽬录和库⽬录,我的机器是win7旗舰版32位的,分别路径为C:ProgramFilesWindows
Kits8.0Includeshared;C:ProgramFilesWindowsKits8.0Includeum和C:ProgramFilesWindows
Kits8.0Libwin8umx86;,然后重新编译成功。
当⽤template
”,是的,下载安装vc_后还需要在VS2012中配置它。打开项⽬属性->配置属性->常规⾥边
的“平台⼯具集”,选择“vc_compilerCTPNov2012”,再重新⽣成解决⽅案,成功通过。
好吧,现在才开始正式测试。
参考C++11标准中⽂版⽂档()和英⽂版⽂档(),其中说明部分:“没有⼀个简洁的机制对变长参数模板中的值进⾏迭
代”,能“使⽤运算符'...'在代码各处对实参包施加展开操作”;另外,能⽤sizeof...来得到参数的个数。
也就是说,必须只能逐层递归来处理各个参数,并且C++11中依然没有类似函数参数那样的直接取参数的宏va_list。
例1.1⼀个模板函数的错误例⼦
template
voidtest(Args...args)
{
cout<
}
例1.2⼀个模板函数的正确例⼦
template
voidmyprintf(constchar*s,Tvalue)
{
if(*s=='%'){
cout<
}
return;
}
template
voidmyprintf(constchar*s,Tvalue,Args...args)
{
if(*s=='%'){
cout<
myprintf
}
return;
}
例1.1和例1.2对⽐,说明参数包必须被展开成typenameT等原⼦类型使⽤。
未完待续...
更多推荐
vs2012中文旗舰版下载
发布评论