# 结构体继承

IDL 中结构体支持 C++中的继承机制,例如:

//IDL
	struct BaseData
	{
		string basestr;
	};
	struct UserDataType:BaseData
	{
		long l;
		string derstr;
	};
1
2
3
4
5
6
7
8
9
10

映射为:

	//C++
	struct BaseData {
	  BaseData();
	  BaseData(const BaseData  &IDL_s);
	  ~BaseData()
	  char* basestr;
	};
	struct UserDataType:BaseData {
	  UserDataType();
	  UserDataType(const UserDataType  &IDL_s);
	  ~UserDataType();
	  long l;
	  char* derstr;
	};
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# IDL 定义示例

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

struct BaseData{
	string basestr;
};
struct UserDataType:BaseData{
	long l;
	string derstr;
};

1
2
3
4
5
6
7
8

# 代码示例

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

/* 6. 创建一个数据样本 */
/* 建议:该数据为new出来的,使用后用户需要调用delete_data进行释放内存*/
	instance = UserDataTypeTypeSupport::create_data();
	char basestr[10] = "basestr";
	char derstr[10] = "derstr";
	//基类变量赋值
	strcpy(instance->basestr, basestr);
	//派生类变量赋值
	instance->l = 1;
	strcpy(instance->derstr, derstr);

1
2
3
4
5
6
7
8
9
10
11

# 数据收发示例:

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

图中标号 1 为订阅端接收到发布端一次完整数据的情况显示。发布端送 UserDataType 结构体中数据的同时发送其基类 BaseData 中的数据。

图 1 结构体继承数据收发示例(Windows->Linux)

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

图中标号 1 为订阅端接收到发布端一次完整数据的情况显示。发布端送 UserDataType 结构体中数据的同时发送其基类 BaseData 中的数据。

图 2 结构体继承数据收发示例(Linux -> Windows)