osg*_*sgx 21 c++ protocol-buffers multidimensional-array
如何使用协议缓冲区存储双(1D)数组?那么多维(2D或3D)密集阵列呢?
smi*_*hax 26
人们可以简单地模仿C/C++内存布局:
message DoubleMatrix {
required uint32 rows = 1;
required uint32 cols = 2;
repeated double data = 3 [packed=true];
}
Run Code Online (Sandbox Code Playgroud)
要访问数据,请使用data[i*cols+j](row-major)或data[i+rows*j](column-major).对于方形矩阵,只需要存储一个rows/ cols必须存储.从技术上讲,即使在矩形情况下,protobuf也会知道数据的长度,并且可以导出另一个值.
为了便于使用,可能会将Matrix包装在C++中,其中包含允许访问的Adapter类double MatrixAdapter::get(int row, int col); 它也可以验证data_size()==rows()*cols().
Mar*_*ell 25
最好存储一个double数组
repeated double foo = 5 [packed=true];
Run Code Online (Sandbox Code Playgroud)
repeated使它作为一个列表,允许多个项目; packed避免每个项目的标题.
protobuf中没有矩形(或更高)数组的直接支持.最接近的是存储类似的东西:
repeated innerType foo = 5; // note, can't be "packed"
message innerType {
repeated double foo = 1 [packed=true];
}
Run Code Online (Sandbox Code Playgroud)
这大致类似于锯齿状阵列,但每层之间都有一个元素.
| 归档时间: |
|
| 查看次数: |
16253 次 |
| 最近记录: |