xp系统停止服务怎么办-excel图表制作

vs2012中文旗舰版下载
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;,然后重新编译成功。

当⽤templateclasstuple;测试时,报错“errorC2143:语法错误:缺少“,”(在“...”的前⾯)

”,是的,下载安装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(s+1,args...);

}

return;

}

例1.1和例1.2对⽐,说明参数包必须被展开成typenameT等原⼦类型使⽤。

未完待续...

更多推荐

vs2012中文旗舰版下载