我即将自己编写一些代码,因为没有找到我需要的东西,但我觉得在深入研究之前应该先向大众询问。
- 是否有boost或stl的随机访问容器类型,允许传入预填充的缓冲区?
这个想象中的容器类型将操作类似于这样:
const int blobSize = unpackBlobSize( msg );
int * blob = unpackBlobData( msg );
SpecialVector<int> mySpecialIntVector( blob, blobSize );
我需要将一个旧的库中使用C风格的原始指针来操作缓冲区,但希望使用C++样式的容器语义而不需要进行复制。我希望能够使用std::vector加上预分配和预填充缓冲区构造函数,但要去除resize方法。
Libeigen通过他们的Eigen::Map提供了这种功能,可以实现以下功能:
int array[9];
for(int i = 0; i < 9; ++i)
array[i] = i;
stl::cout << Eigen::Map<Eigen::Matrix3i>(array) << stl::endl;
有人知道一个覆盖这些限制的 boost 或 stl 模板吗?
std::vector
尽可能地模拟标准数组,同时还具有隐式重新分配的功能。如果你要求“减少大小”,那么你还剩下什么?如果你想使用std
算法,你可以将指针作为迭代器传递。你能举个例子说明为什么你需要在固定缓冲区上使用向量 API 吗?话虽如此,我认为在std::string
的情况下,这将非常有用。 - davkavector
API 中没有自动调整大小功能,那你缺少什么?“更加安全的 C++/STL 方式”只是一种说法,抱歉。你可以像使用内置数组一样高兴地超出 vector 的边界。唯一比 vector 更安全的是隐式内存管理,但你已经放弃了这一点。指针只是一种(内置)迭代器类型,只要你不自己管理内存,就可以将它们用作迭代器。STL 只是一种工具,而不是避免不良后果的护身符 :) - davka