c++模板实现多参数任意传 - 类实现
2015-11-29 14:32
477 查看
之前写的有篇文章是用方法实现的变长参数,这边就是用类实现的,更加高大上,这样就可以对不同的实例对象进行处理。
下面是《深入理解c++11》书中的截图
下面是自己实现的代码
下面是《深入理解c++11》书中的截图
下面是自己实现的代码
//--------------------- 实现模板的递归 begin ------------------ template < typename... Args> class MultiArgs; //变长模板声明,一定要最上面,不然编译报错 template <> class MultiArgs<> {}; //边界条件,终止继承递归 template < typename T, typename... Args> class MultiArgs<T, Args...> : public MultiArgs<Args...> //偏特化递归定义 { public: MultiArgs(T _t, Args... _args) : MultiArgs<Args...>(_args...) { value = _t; std::cout << "--- addr:0x" << this << ", value:" << _t << std::endl; //TODO:这里可以实现处理参数_t的逻辑, //比如丢重载各种匹配参数的函数,到自定义数据结构的容器中 } public: T value; }; //--------------------- 实现模板的递归 begin ------------------ template <typename... Args> void sendMsg(Args... _args) { //计算变长报的长度:sizeof...(Args) int argsLength = sizeof...(Args); std::cout << "--- _args length:" << argsLength << std::endl; //多参数使用时一定要带上... MultiArgs<Args...> ma(_args...); } void testArgsForClass() { sendMsg(111, "yang", 22.22f, true); } /* 结果: --- _args length:4 --- addr:0x0016F72C, value:1 --- addr:0x0016F72C, value:22.22 --- addr:0x0016F72C, value:yang --- addr:0x0016F72C, value:111 类的初始化顺序是先初始化构造函数:后面的东西,再初始化{}块里的东西, 所以打印的顺序是传入sendMsg参数时的顺序反过来 */
相关文章推荐
- effective c++ 笔记之static_cast
- vs2008 dlib编译问题USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE
- 【C++】满二叉树与完全二叉树的区别及判断
- C++引用方式实现两个值的互换
- C++运算符重载
- C++抛出异常与传递参数的区别
- C++抛出异常与传递参数的区别
- C++【线程同步】-临界区同步
- c/c++进制转换
- C++的chrono、ratio和ctime等头文件
- leetcode Search a 2D Matrix
- C语言命名空间
- c语言字符数组与字符串的使用详解
- 读取文本文件,打印到屏幕
- C语言中switch的用法
- 合并两个排序的链表(C++版)
- C++模版完全解析
- C++中的static关键字
- C++标准库Vector & Iterator用法
- C++ 关于 调用函数时值传递和引用的理解