我有一些数据类型,如果我使用普通的旧 C,将实现为
typedef struct {
...many other members here...
unsigned short _size;
char _buf[0];
} my_data;
我想做的,基本上是把它变成一个 class 并添加常用的操作符,比如 less、equality、< em>复制构造函数、运算符赋值等等。正如你想象的那样,我会在像 std::map 这样的关联容器中使用这样的 class 作为它的 key。
我需要缓冲区理想地处于对象本身的相同级别,否则当我必须比较它们中的两个(缓冲区)时,我会让 CPU 获取指针并加载它在内存中;我不想使用 std::vector,因为分配的内存不会与其余数据成员连续。
对我来说主要问题是在 C 中我会有一个函数,给定缓冲区的大小会为其分配适当的内存大小。在 C++ 中,这样的事情是做不到的。
我说的对吗? 干杯
最佳答案
这是不可能的。您的对象实际上是可变大小的,但 std::map
将始终将其视为固定大小,并且无法实现复制或移动。您需要一个旧的 C 风格容器才能使用这样的 hack。
编辑:自定义分配器。有趣的解决方案,我没想到。我不知道你是否能让它发挥作用,但它值得研究。
关于c++ - 是否可以用零长度数组成员编写一个 "complete"C++ 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897216/