WEB开发网
开发学院软件开发VC 在常规的编程任务中使用新的 <tuple> 库 阅读

在常规的编程任务中使用新的 <tuple> 库

 2007-03-15 21:55:17 来源:WEB开发网   
核心提示: 为了得到 tuple 的元素个数,使用 tuple_size():int sz=tuple_size <tuple <int, const double, std::string> >::value;//3make_tuple() 用于构造 tuple 类型,在常规

为了得到 tuple 的元素个数,使用 tuple_size():

int sz=tuple_size <tuple <int, const double, std::string> >::value;//3

make_tuple() 用于构造 tuple 类型。该函数按照其参数创建一个 tuple 类型:

void f(int i);
T1=make_tuple(&f); // returns: tuple<void (*)(int)>
T2=make_tuple("hi", 2); // tuple< const char (&)[3], int>

tuple_element() 函数返回单个元素的类型。该函数以索引和 tuple 类型为参数:

//获得第一个元素的类型
T=tuple_element <0, tuple<int, int, char> >::type;//int

如果你需要存取实际的元素,而非类型,那么就用 get<N>() 函数。注意 tuple 使用基于 0 的索引。

tuple <int, double> t;
int n=get<0>(t); //获得第一个元素
get<1>(t)=0.5; //给第二个元素赋值

3、现实世界中的 tuple

下面让我们考察一下 tuple 类型的应用,假设你需要实现这样一个函数:将某个文件名转换为FILE * 和文件描述符。大家知道,C++ 不允许一个函数返回多个类型的值。通常的做法是定义两个名字稍有差别的函数来解决这个问题的,例如:

int convert_filename(const char * path);
FILE * fconvert_filename(const char * path);

POSIX 库充满了这样的函数集。在这种情况下是不会用重载机制的,因为你无法定义仅有返回值不同的函数的重载版本。例如:

int convert_filename(const char* path);
FILE* convert_filename(const char* path); //出错

通过使用 tuple 类型来包装两个返回类型,你可以模拟单个函数返回多个类型。像往常一样,使用 typedef 来隐藏繁琐的语法:

Tags:常规 编程 任务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接