gpt4 book ai didi

c++ - 是否可以用零长度数组成员编写一个 "complete"C++ 类?

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:27 26 4
gpt4 key购买 nike

我有一些数据类型,如果我使用普通的旧 C,将实现为

typedef struct {
...many other members here...
unsigned short _size;
char _buf[0];
} my_data;

我想做的,基本上是把它变成一个 class 并添加常用的操作符,比如 lessequality、< em>复制构造函数、运算符赋值等等。正如你想象的那样,我会在像 std::map 这样的关联容器中使用这样的 class 作为它的 key

我需要缓冲区理想地处于对象本身的相同级别,否则当我必须比较它们中的两个(缓冲区)时,我会让 CPU 获取指针并加载它在内存中;我不想使用 std::vector,因为分配的内存不会与其余数据成员连续

对我来说主要问题是在 C 中我会有一个函数,给定缓冲区的大小会为其分配适当的内存大小。在 C++ 中,这样的事情是做不到的。

我说的对吗?干杯

最佳答案

这是不可能的。您的对象实际上是可变大小的,但 std::map 将始终将其视为固定大小,并且无法实现复制或移动。您需要一个旧的 C 风格容器才能使用这样的 hack。

编辑:自定义分配器。有趣的解决方案,我没想到。我不知道你是否能让它发挥作用,但它值得研究。

关于c++ - 是否可以用零长度数组成员编写一个 "complete"C++ 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com