C++第09课 模板 (二)
2021/9/7 1:06:35
本文主要是介绍C++第09课 模板 (二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.可变参模板函数
//列表方式展开 template<class _Ty> void print(_Ty data) { cout << data << endl; } template<class ...Args> void printData(Args... args) { int array[] = { (print(args),0)... }; } //递归方式展开 void printData2() { cout << endl; } template<class _Ty,class ...Args> void printData2(_Ty data, Args ...args) { cout << data << "\t"; printData2(args...); } //求任意个整数的和 //1.递归展开 int sum() { return 0; } template<class _Ty,class ...Args> int sum(_Ty data, Args ...args) { return data + sum(args...); } //2.列表展开 template<class _Ty> _Ty sum2(_Ty data) { return data; } template<class ...Args> int sum1(Args... args) { int array[] = { (0,sum2(args))... }; int sum = 0; for (int i : array) { sum += i; } return sum; } int main() { printData(1, "love", 2.2f, 'A'); printData2(1, "love", 2.2f, 'A'); cout << sum(1, 2, 3, 4, 5) << endl; cout << sum1(1, 2, 3, 4, 5) << endl; return 0; }
2.可变参数模板类
//模板特化+递归的方式展开参数包 template <class ...Args> class Tup; //特化 template <> class Tup<> {}; //递归方式实现 template <class _Ty,class ...Args> class Tup<_Ty, Args...> { public: Tup(_Ty data, Args ...args) :data(data), args(args...) {} _Ty& head() { return data; } Tup<Args...>& next() { return args; } protected: _Ty data; Tup<Args...> args; }; void testTup() { Tup<int, string, char> tup(1, "string", 'A'); cout << "第一个参数:" << tup.head() << " 第二个参数:" << tup.next().head() << " 第三个参数:" << tup.next().next().head() << endl; Tup<string,int,int,int,int> mm("mm",18,98,88,88); } //模板特化+继承的方式展开参数包 template <class ...Args> class Test; template <> class Test<> { }; /* template <class _This, class... _Rest> class tuple<_This, _Rest...> : private tuple<_Rest...> */ template <class _Ty,class ...Args> class Test<_Ty, Args...> :public Test<Args...> { public: Test(_Ty data, Args... args) :data(data), Test<Args...>(args...) {} _Ty& head() { return data; } Test<Args...>& next() { return *this; } protected: _Ty data; }; void testTest() { Test<int, string, char> test(1, "string", 'A'); cout << "第一个参数:" << test.head() << " 第二个参数:" << test.next().head() << " 第三个参数:" << test.next().next().head() << endl; Test<string, int, int, int, int> mm("mm", 18, 98, 88, 88); } int main() { testTup(); testTest(); tuple<int, string, char> testTuple; return 0; }
这篇关于C++第09课 模板 (二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享