# 结构体继承
IDL 中结构体支持 C++中的继承机制,例如:
//IDL
struct BaseData
{
string basestr;
};
struct UserDataType:BaseData
{
long l;
string derstr;
};
1
2
3
4
5
6
7
8
9
10
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
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
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
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)