# 别名复合

IDL 中可为结构体、聚合体、枚举类型、序列类型、数组类型取别名并在其他结构类型中使用。(不支持为别名取别名的使用方式)例如:

//IDL
	//结构体别名
	typedef S MYDATA;
	//聚合体别名
	typedef U MYU;
	//枚举类型别名
	typedef Color COLOR;
	//序列类型别名
	typedef sequence<long> SEQL;
	//数组类型别名
	typedef long LONG[2][3];
1
2
3
4
5
6
7
8
9
10
11

映射为:

	//C++
	//结构体别名
	typedef myData MYDATA;
	typedef const myData MYDATA_IDL_const;
	//聚合体别名
	typedef U MYU;
	typedef const U MYU_IDL_const;
	//枚举类型别名
	typedef Color COLOR;
	typedef const Color COLOR_IDL_const;
	//序列类型别名
	typedef sequence<long> SEQL;
	//数组类型别名
	typedef long LONGA[2][3];
	typedef long LONGA_slice[3];
	typedef const long LONGA_IDL_const[2][3];
	typedef const long LONGA_cslice[3];
	LONGA_slice* LONGA_alloc();
	LONGA_slice* LONGA_dup (LONGA_slice *IDL_p);
	void LONGA_free (LONGA_slice *IDL_p);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# IDL 定义示例

接口定义语言(IDL)字符串类型在 idl 文档中定义(以结构体为例):

enum Color { blue,green};
struct S{
	long l;
	string str;
};
union U switch(long){
	case 1: short s;
	default: long l;
};
//结构体别名
typedef S MYS;
//聚合体别名
typedef U MYU;
//枚举类型别名
typedef Color COLOR;
//序列类型别名
typedef sequence<long> SEQL;
//数组类型别名
typedef long LONG[2][3];
struct UserDataType{
	MYS mys;
	MYU u;
	COLOR c;
	SEQL seql;
	LONG l;
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 代码示例

生成测试用例后在 pub.cpp 中创建数据样本后添加赋值语句:

/* 6. 创建一个数据样本 */
/* 建议:该数据为new出来的,使用后用户需要调用delete_data进行释放内存*/
	instance = UserDataTypeTypeSupport::create_data();
	char datastr[10] = "datastr";
	instance->mys.l = 1;
	strcpy(instance->mys.str, datastr);
	instance->u.__d = 1;
	instance->u.s(10);
	instance->c = COLOR::blue;
	instance->seql.ensure_length(2, 2);
	instance->seql[0] = 101;
	instance->seql[1] = 102;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			instance->l[i][j] = i+j;
		}
	}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 数据收发示例:

图 1 为使用 IDL 定义示例 中结构体生成的测试 demo,在 Windows 系统上启动发布端、在 Linux 系统启动订阅端后数据收发情况。

图中标号 1

图 1 别名复合类型数据收发示例(Windows->Linux)

图 2 为使用 IDL 定义示例 中结构体生成的测试 demo,在 Windows 系统上启动订阅端、在 Linux 系统启动发布端后数据收发情况。

图中标号 1 为订阅端接收到发布端一次完整数据的情况显示。

图 2 别名复合类型数据收发示例(Linux -> Windows)