用于打包数据的标准方法
std method for packing data
假设我有一个要打包的结构(因为我正在与另一个程序通信,打包所有数据更简单,这样您就可以保证它们是网格的)。
在 gcc
中打包一个结构你这样做:
struct __attribute((packed)) Mine { /* Members here */ };
std
库中是否定义了模板来执行此操作?
我问的原因是因为有std::aligned_storage
,这在对齐方面非常有帮助,而且在打包数据方面也有类似的东西似乎是合乎逻辑的。
那么这是否存在?
虽然很难证明是否定的,但我确信答案是否定的。
从根本上说,std
几乎完全可以在定义良好的 C++ 中实现,只是偶尔需要有限的编译器协调(例如 std::size_t
是 sizeof
表达式的类型) .您描述的功能与这个概念完全不一致。
不,它不存在。标准明确表示结构中的打包字段是实现定义的。
它还提到对于位域,位从一个位域流向下一个位域的方式也是实现定义的(我知道您也在使用位域)。抱歉,您必须为您的编译器明确编码。
假设我有一个要打包的结构(因为我正在与另一个程序通信,打包所有数据更简单,这样您就可以保证它们是网格的)。
在 gcc
中打包一个结构你这样做:
struct __attribute((packed)) Mine { /* Members here */ };
std
库中是否定义了模板来执行此操作?
我问的原因是因为有std::aligned_storage
,这在对齐方面非常有帮助,而且在打包数据方面也有类似的东西似乎是合乎逻辑的。
那么这是否存在?
虽然很难证明是否定的,但我确信答案是否定的。
从根本上说,std
几乎完全可以在定义良好的 C++ 中实现,只是偶尔需要有限的编译器协调(例如 std::size_t
是 sizeof
表达式的类型) .您描述的功能与这个概念完全不一致。
不,它不存在。标准明确表示结构中的打包字段是实现定义的。
它还提到对于位域,位从一个位域流向下一个位域的方式也是实现定义的(我知道您也在使用位域)。抱歉,您必须为您的编译器明确编码。