包装数据的STD方法
std method for packing data
假设我有一个想要打包的结构体(因为我正在与另一个程序通信,打包所有数据更简单,这样可以保证它的网格化)。
在gcc
中打包一个结构体,你这样做:
struct __attribute((packed)) Mine { /* Members here */ };
在std
库中是否定义了一个模板来完成此操作?
我问的原因是因为有std::aligned_storage
,这对事物的对齐端非常有帮助,并且对于包装数据有类似的事情似乎是合乎逻辑的。
这个存在吗?
不,它不存在。标准明确指出,结构中的打包字段是实现定义的。
它还提到,对于位字段,位从一个位字段流到下一个位字段的方式也是实现定义的(我知道你也在使用位字段)。对不起,但是你必须为你的编译器显式地编写代码。
虽然很难证明是否定的,但我确信答案是否定的。
基本上,std
几乎完全可以在相当良好定义的c++中实现,只是偶尔需要有限的编译器协调(例如std::size_t
是sizeof
表达式的类型)。你所描述的特征与这个概念完全不一致。
相关文章:
- 使用std::函数映射对象方法
- 初始化具有非默认构造函数的std::数组项的更好方法
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 为什么 std::span 缺少 cbegin 和 cend 方法?
- 使 std::vector 分配对齐内存的现代方法
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 如何访问存储在 std::variant 中的类的方法
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- 我无法使用C++指针指向类方法返回的 std::vector
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 在 std::vector<无符号字符中存储任意数据的方法>
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- std::bind,无法让具有单个参数的方法工作
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
- 向后迭代 std::array 或 std::vector 的正确方法是什么?