c++11变参模板的展开
来源:互联网 发布:nginx部署webpack项目 编辑:程序博客网 时间:2024/06/05 19:24
有时候我们需要单独操作变参模板的每一个参数,这时候就需要变参模板的展开。比如序列化反序列化,脚本语言绑定时的传参等,本文介绍变参模板展开的3种常用方式。
1. 递归法
template <typename Arg1>void expand(Arg1 arg1){ std::cout << arg1;}template <typename Arg1, typename... Args>void expand(Arg1 arg1, Args... args){ std::cout << arg1; expand(args...);}int main(){ expand("hello", "world", 1, 2, 3); return 0;}
通过一个分离第一个变参实现,这也是最常用的一种方式。
输出:helloworld123
2. 数组法
template<typename ARG>int doprint(ARG arg){ std::cout << arg; return 0;}template <typename... Args>void expand(Args... args){ int _tmp[] = { doprint(args)... };}int main(){ expand("hello", "world", 1, 2, 3); return 0;}
通过一个临时数组的初始化来实现变参的展开。
输出:helloworld123
3. 辅助函数法
template<typename ARG>int doprint(ARG arg){ std::cout << arg; return 0;}template <typename... Args>void doexpand(Args... args){ }template <typename... Args>void expand(Args... args){ doexpand(doprint(args)...);}int main(){ expand("hello", "world", 1, 2, 3); return 0;}
和数组法类似,通过一个辅助函数来实现参数的展开,有一点需要注意,它对参数的遍历是倒序的,也就是先访问最后一个参数,最后访问第一个参数。
输出:321worldhello
0 0
- c++11变参模板的展开
- C++11变参模板
- C++11变参模板的参数包
- C++11中的变参模板的使用
- 获取C++11 变参模板的参数数量
- C变参的实现
- C变参的实现
- C语言的变参
- 学习变参模板
- C语言的变参的研究
- c++11通过变参模板实现特殊的数据结构和算法
- C语言的变参函数设计
- C语言的变参技术-va_arg
- C语言的变参函数设计
- C语言的变参技术-va_arg
- C语言的变参函数设计
- C语言变参的实现
- C语言的变参函数设计
- STL heap底层及使用
- 设计模式C++学习笔记之十(Builder建造者模式)
- OpenStack(4)
- DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP、二维DP)
- 修改mysql字符集
- c++11变参模板的展开
- linux c 线程池
- 数据结构之跳表Skiplist
- 策略模式
- ...
- 局域网中Linux主机之间同步时间的一种简便方法
- STL qriority使用及原理
- etacilpuDsniatnoC.217
- hitTest:withEvent:方法流程