C++ - 可变参数函数模板(Variadic Function Template) 详解 及 代码
来源:互联网 发布:淘宝上下架在哪里设置 编辑:程序博客网 时间:2024/06/07 09:26
可变参数函数模板(Variadic Function Template) 详解 及 代码
本文地址: http://blog.csdn.net/caroline_wendy/article/details/17076695
可变参数函数模板(variadic function template), 主要使用了包扩展(pack expansion)的方式, 即"...",
把一个模式(pattern)扩展为包中每一个元素(element)的形式;
可变参数函数模板, 经常会使用递归(recursive)进行处理包(pack)参数,
需要一个非可变参数(nonvariadic)函数模板,结束递归, 当最后一次调用时, 会调用非可变参数版本, 则递归结束;
还需要一个绑定(bing)的参数, 处理包(pack)中的一些元素, 通过递归,顺次处理包中的元素;
包扩展可以应用于各种形式, 如
函数的模板参数, 例如: templae<typename Args...>
函数的参数模板, 例如: cosnt Args&... rest
函数的形参, 例如: rest...
函数模板, 例如: debug_rep(rest)...
具体参见注释及结果, 代码如下:
//=====================================// Name : CppPrimer.cpp// Author : Caroline// Version : 1.0// Description : Example, UTF-8//=====================================/*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <sstream>using namespace std;//返回bug信息template <typename T> std::string debug_rep (const T& t){std::ostringstream ret;ret << t;return ret.str();}//非可变参数模板template<typename T>std::ostream &print(std::ostream &os, const T &t){//std::cout << "This is nonvariadic function! ";return os << t;}//可变参数模板, "..."是包扩展(Pack Expansion)template <typename T, typename... Args>std::ostream &print(std::ostream &os, const T &t, const Args&... rest){os << t << ", ";return print(os, rest...);}//函数模板的包扩展template <typename... Args>std::ostream &errorMsg(std::ostream &os, const Args&... rest){return print(os, debug_rep(rest)...); //使用模板的包扩展}int main(){int i(10); std::string s("girls");//print(std::cout, i, s, 42);errorMsg(std::cout, i, s, 10, "ladies");return 0;}
输出:
10, girls, 10, ladies
- C++ - 可变参数函数模板(Variadic Function Template) 详解 及 代码
- variadic template (可变参数模板)
- C++11标准之variadic template (可变参数模板)
- C++11标准新增可变参数模板(variadic template)
- C++ -- variadic template (可变参数模板)
- C++ -- variadic template (可变参数模板)
- C++ -- variadic template (可变参数模板)
- C++ - 成员函数(member function)模板(template) 详解 及 代码
- C++ - 函数模板定制(function template specialization) 详解 及 代码
- 成员函数(member function)模板(template) 详解 及 代码
- C++11中可变参数个数的模板(variadic template)
- C++ - 函数模板(function template) 的 重载(overload) 详解 及 代码
- 可变参数模板(Variadic Templates)
- c++-可变参数模板函数
- C++ - 函数模板(function template) 详解
- 函数模板 Function Template(C++Primer-10)
- C++0x尝鲜:Variadic Function Templates(带变长参数的函数模板)
- C++11尝鲜:Variadic Function Templates(带变长参数的函数模板)(续)
- C#创建txt文件
- 二维码的生成细节和原理(一):基础
- TelephonyManager获取手机设备识别号
- SVM支持向量机总结(不包括高维核函数等)
- c语言 设置当前路径
- C++ - 可变参数函数模板(Variadic Function Template) 详解 及 代码
- Java多线程-线程的生命周期
- ExtJS的使用方法汇总(1)——配置和表格控件使用
- arguments for subroutine in Perl
- 数组的排序
- Oracle:递归查询详解
- 100个高质量Java开发者博客
- Objective-C的日期类NSDate
- viewpager与子view的事件冲突解决