# 数组类型(array)
一个 IDL 的数组映射为:
- 一个相应的 C++数组定义。
在 IDL 和 C++里,所有的数组下标都是从 0 至<size -1>。如果数组的元素是字符串或对象引用,那到 C++的映射与结构成员的映射相同,就是说:对数组成员的赋值将释放原来值的存储空间。
//IDL
struct UserDataType {
long arrayLong[10];
float arrayFloat[5][3];
};
1
2
3
4
5
6
2
3
4
5
6
映射为:
//C++
struct UserDataType {
long arrayLong[10];
float arrayFloat[5][3];
};
1
2
3
4
5
6
2
3
4
5
6
# IDL 定义示例
接口定义语言(IDL)字符串类型在 idl 文档中定义(以结构体为例):
struct UserDataType{
long arrayLong[10];
float arrayFloat[5][3];
};
1
2
3
4
2
3
4
# 代码示例
生成测试用例后在 pub.cpp 中创建数据样本后添加赋值语句:
/* 6. 创建一个数据样本 */
/* 建议:该数据为new出来的,使用后用户需要调用delete_data进行释放内存*/
instance = UserDataTypeTypeSupport::create_data();
for (int i = 0; i < 10; i++)
{
instance->arrayLong[i] = i;
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
instance->arrayFloat[i][j] = i+(float)j/10;
}
}
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
# 数据收发示例:
图 1 为使用 IDL 定义示例 中结构体生成的测试 demo,在 Windows 系统上启动发布端、在 Linux 系统启动订阅端后数据收发情况。
图 1 数组类型数据收发示例(Windows->Linux)
图 2 为使用 IDL 定义示例 中结构体生成的测试 demo,在 Windows 系统上启动订阅端、在 Linux 系统启动发布端后数据收发情况。
图 2 数组类型数据收发示例(Linux -> Windows)