怎么样用一个函数返回共用体

来源:百度知道 编辑:UC知道 时间:2024/05/20 19:13:14
一个结构体有如下成员:共用体,共用体的类型,其它的成员。
在知道了,共用体的类型情况下,怎么用函数返回共用体中我们所需要的变量。如:QueryValueByType(int type);
事前,我们并不知道共用体的类型,该如何保存此共用体的实际值。多谢各位大侠。
所需类型 QueryValueByType(enum type);
遇到如下难题:
函数的返回值类型,是由type决定的,但我们又不能用返回值类型,来重载函数。
如果用共用体作为返回值,在这个函数执行完后,我们还是要根据类型,来取值,相当于这个QueryValueByType没用。

一个简单的共用体比如 union uu{int a; double b;} obj;
可以通过一个间接的转换得到成员值: *(int*)&obj, 或者*(double*)&obj。 (更简单的办法不清楚有没有。。)当然这个完全可以用模板来写

template <_Ty, _UTy>
_Ty& QueryValueByType(_UTy uni) {return *(_Ty*)&uni; }

调用就是 QueryValueByType<int>(obj) 当然你要自己确保类型正确了

C 语言:
#include <stdio.h>
#include <stdlib.h>

// 用 typedef 定义 共用体 为 UU型变量
typedef union {float a; long int b;} UU;

// 下面函数送返 UU型
UU QueryValueByType(int t) {
UU y;
y.b = t;
return y; }

void main()
{
UU x;
int t=2;
x = QueryValueByType(t); // 调用,返回值存 UU型 x
printf("%d",x.b); // 看结果

}