Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2552229
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: C/C++

2013-06-12 17:48:17

    函数返回值是有限的,尤其是c语言,想要返回n个参数,那只能在内部malloc一个结构体对象,然后返回结构体指针就行!不过这样,结构体释放就是个问题,而且破坏了函数的独立性。c++的boost中有tuple,就是干这个的,我们可以返回这个tuple,内部支持多个参数,实现大概就是这样:

点击(此处)折叠或打开

  1. #ifndef _TUPLE_
  2. #define _TUPLE_

  3. //#include "trait.h"    // 如果有特殊需求,可以使用traits

  4. /**
  5.  * @brief tuple - 类似pair和make_pair,能够容纳多种类型的多个数的容器,当然一般情况是一对
  6.  *                 类似map,可以pair<int, pair<int, pair<.....?>>>来实现多个...
  7.  *                 以数量换取了“不优雅”...
  8.  */
  9. namespace tuple
  10. {
  11.     /**定义最多返回4个参数的tuple模版类*/
  12.     template <typename T0 = void, typename T1 = void, typename T2 = void, typename T3 = void, typename T4 = void>
  13.     struct Tuple
  14.     {
  15.         Tuple(){}
  16.         Tuple(T0 a, T1 b, T2 c, T3) : _a(a), _b(b), _c(c), _d(d)
  17.         {

  18.         }
  19.         T0 _a;
  20.         T1 _b;
  21.         T2 _c;
  22.         T3 _d;
  23.     };

  24.     /**特化返回1个*/
  25.     template <typename T0>
  26.     struct Tuple<T0, void, void, void>
  27.     {
  28.         Tuple(){}
  29.         Tuple(T0 a) : _a(a)
  30.         {

  31.         }
  32.         T0 _a;
  33.     };

  34.     /**特化返回2个*/
  35.     template <typename T0, typename T1>
  36.     struct Tuple<T0, T1, void, void>
  37.     {
  38.         Tuple(){}
  39.         Tuple(T0 a, T1 b) : _a(a), _b(b)
  40.         {

  41.         }
  42.         T0 _a;
  43.         T1 _b;
  44.     };

  45.     /**特化返回3个*/
  46.     template <typename T0, typename T1, typename T2>
  47.     struct Tuple<T0, T1, T2, void>
  48.     {
  49.         Tuple(){}
  50.         Tuple(T0 a, T1 b, T2 c) : _a(a), _b(b), _c(c)
  51.         {

  52.         }
  53.         T0 _a;
  54.         T1 _b;
  55.         T2 _c;
  56.     };

  57.      /**完全特化返回0个*/
  58.     template <>
  59.     struct Tuple <void, void , void, void>
  60.     {
  61.         Tuple(){}
  62.     };
  63. }

  64. #endif    //_TUPLE_
测试:

点击(此处)折叠或打开

  1. #include "tuple.h"
  2. #include <iostream>
  3. #include <string>

  4. using namespace std;

  5. ///< 保存员工ID和姓名
  6. tuple::Tuple<int, string> staffTest()
  7. {
  8.     tuple::Tuple<int, string> bt;
  9.     //.......
  10.     bt._a = 108045;
  11.     bt._b = "lei";
  12.     return bt;
  13. }

  14. int main(int argc, char ** argv)
  15. {
  16.     tuple::Tuple<int, string> inf = staffTest();

  17.     cout << inf._a << " " << inf._b << endl;

  18.     getchar();
  19.     return 0;
  20. }

阅读(2821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~