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

标签 c++ stl flexible-array-member

我有一些数据类型,如果我使用普通的旧 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/

相关文章:

c++ - STL::map erase 与 std::vector erase 的行为不同

c - 灵活数组成员(零长度数组)

c - 是否允许返回具有灵活数组成员的结构?

c++ - 我的代码在达到 eof 时会引发 basic_ios::clear ,但在 catch block 中处理正确的 eof 之后?

java - 有没有办法在 Mac 中以 headless 方式运行 GUI 应用程序?

c++ - 在一个函数中使用 namespace 中的符号,但在同一文件中不使用另一个 namespace 中的符号

c - 在结构内部重新分配动态数组

c++ - 如何隐藏实现帮助模板?

c++ - 基于 partial_index_search 的结果 boost multi_index_container 部分索引搜索

c++ - 从/向二进制文件读取/写入十六进制字节