C++学习之模板编程:可变参数模板
2015-12-08 19:23
337 查看
typename…指出接下来的参数表示零个或多个类型的类表.sizeof…返回参数包的个数.
template<typename T,typename...args> void foo(const T& t, const args&... rest) { cout << sizeof...(args)<<" "<<sizeof...(rest)<<endl; } int main() { int i = 0; double d = 3.14; string s = "how now brown cow"; foo(i, s, 42, d); foo(d, s); foo("hi"); return 0; }
编写可变参数函数模板,需要写两个版本.其中一个用来终止递归.
print函数用来打印任意类型的元素.
template<typename T> void print(const T& t) { cout << t << ", "; } template<typename T,typename...args> void print(const T& t, const args& ...rest) { cout << t << ", "; print(rest...); }
包扩展
template<typename... arg> ostream& errmsg(ostream& os, const arg&... rest) { debug_rep(rest)...; return print(os, debug_rep(rest)...);//该模式的意思是对表示我们希望对函数参数包rest中的每个元素调用debug_rep;扩展的结果是一个逗号分隔的调用列表. }
注意:比较奇怪的一点是直接使用debug_rep(rest)…进行调用会出错.原因我暂时没搞明白(google了半天没有找到相关信息),解决的办法就是构造一个过渡的函数,函数体为空.比如;
======================================================================================定义自己的make_shared,转发参数
template <typename T,typename... Args> shared_ptr<T> make_share(Args&&... args) { auto sp = new T(std::forward<Args>(args)...);//获取内置指针 return shared_ptr<T>(sp); } int main() { auto t = make_share<string>(10, '0'); }
相关文章推荐
- c语言测试程序执行时间
- 面试题 C++ 动态绑定 虚函数
- 求编译器中数的最值(c++)
- boost.spirit之解析C++头文件
- C++ allocator
- 在C语言中利用PCRE实现正则表达式
- 简单的学生信息处理程序实现(C++程序设计第2周)
- 黑马程序员——C语言——指针
- 一个对战程序的C++源代码
- UE4 - C++ 射线捕捉
- C语言实现去除字符串中空格
- C++学习_继承覆盖重载
- C++学习随笔
- C++学习之继承篇
- C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等
- Observer(观察者)设计模式
- C语言 变量的存储方式和生命周期
- c++ BASE64加解密操作
- b树的实现(c++)
- N种方法使用C++调用C#.NET库