C++ template高级
来源:互联网 发布:信用卡淘宝退款 编辑:程序博客网 时间:2024/06/05 13:52
1、 Template 高级属性
1.1 可变参数
// CTemplatetest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include<Array>#include<cstdarg> // C中是<stdarg.h> #include <initializer_list>#include <string.h>using namespace std;//***************************************偏特化***********************************************template<typename T>class A{public: A(T para) { cout << "特化: " << para * para << endl; }};template<>class A<double>{public: A(double para) { cout << "偏特化: " << para * para << endl; }};template<typename T>class A<T*>{public: A(T para) { cout << "指针偏特化T*_T:" << para * para << endl; } A(T* para) { cout << "指针偏特化T*_T*:" << (*para) * (*para) << endl; }};//***************************************模板可变参数***********************************************//属性1: 可变参数 //功能说明: 当模板参数不定时,可以使用这个属性,当然需要有退出口int TestPrintf(){ return 0; }template<typename T>int TestPrintf(T vag){ cout << "cur_vag: " << vag << endl; return 1;}template< typename T, typename...Args>int TestPrintf(T To, Args...ag){ int temp = 0; TestPrintf(To); temp +=TestPrintf(ag...); return temp;}//***************************************非模板可变参数***********************************************// va_list是一种数据类型,args用于持有可变参数。 // 定义typedef char* va_list; //va_list args;// 调用va_start并传入两个参数:第一个参数为va_list类型的变量 // 第二个参数为"..."前最后一个参数名 // 将args初始化为指向第一个参数(可变参数列表) //va_start(args, paramN);// 检索参数,va_arg的第一个参数是va_list变量,第二个参数指定返回值的类型 // 每一次调用va_arg会获取当前的参数,并自动更新指向下一个可变参数。 //va_arg(args, type);// 释放va_list变量 //va_end(args);int printftest(int num, ...){ int rusult = 0; va_list args; va_start(args, num); for (int i = 0; i < num; i++) { cout << va_arg(args, int) << endl; } va_end(args); return rusult;}//***************************************非模板可变参数C++11***********************************************//如果函数的实参数量未知但是全部实参的类型都相同,我们可以使用initializer_list类型的形参(C++11新标准) 类似vectorstring func(initializer_list<string> strlist){ string str = ""; for (auto data : strlist) { cout << "data: " << data.c_str() << endl; str += data; } return str;}//**************************************template元编程**********************************// 对于模板元编程: 你所要的计算,在编译的时候,已经处理玩了,只需要在运行的时候输出结果即可!// 当硬件条件限制的情况下,除了优化算法,还有一种途径,那就是用模板元编程/*斐波那契数列6 H(1)=H(0)=1;7 H(N)= H(N-1)+H(N-2);*/template<int N>struct data{ enum{ value = data<N - 1>::value + data<N - 2>::value };};template<>struct data<0>{ enum{ value = 1 };};template<>struct data<1>{ enum{ value = 1 };};int _tmain(int argc, _TCHAR* argv[]){ cout << "****************偏特化测试*******************" << endl; A<int> a1(99); A<double> a2(9.9); int* pdata = new int; *pdata = 199; A<int*> a3(199); A<int*> a4(pdata); cout <<endl << "****************可变参数测试*****************" << endl; TestPrintf(0, 1, 2, 3, 4); cout << endl << "****************非模板可变参数*****************" << endl; printftest(4, 1, 2, 3, 22); cout << func({ "This", " ", "is", " ", "C++" }).c_str() << endl; cout << endl << "****************元对象编程*****************" << endl; cout << "元对象:" << data<5>::value << endl; getchar(); return 0;}
0 0
- C++ template高级
- C++template
- C template
- C++Template
- list c++template
- Queue-C++template
- Stack-c++template
- C++Template之Priority_queue
- [C++] Template练习
- eclipse-c-template
- eclipse-c-template
- C++template ;模板学习
- list c++template
- c plus template
- Template模版实例(C++)
- C++template--函数模版
- 练习笔记 C++Template
- [C++]Stack with Template
- ui插件收集
- Maven(3):新建Java WebProject
- C语言测试
- Android服务端API仿真
- 基于windows服务监控tomcat服务,防止tomcat死掉
- C++ template高级
- Java中的时间
- 多线程下载文件
- Linux系统中添加库文件路径的方法
- Android:学习AIDL,这一篇文章就够了(下)
- HDU2187悼念512汶川大地震遇难同胞
- 双重检查锁定与延迟初始化
- oracle中flashback_on_standby详细介绍
- iOS检测耳机插入/拔出