向第三方类/结构定义添加构造函数
Adding constructor to third party class/struct definition
第三方库的结构定义为
typedef struct _Example
{
int member;
} Example;
作为一个附带问题,只是出于兴趣,为什么要这样定义?为什么不是struct Example { ... }
?
无论如何,我想用boost::serialization序列化信息,为此需要构造函数。它是安全的只是改变我的第三方头文件的版本通过添加构造函数到结构定义?或者,只是将该定义复制到我自己的代码库中,重新命名它,添加构造函数,并对其进行reinterpret_cast ?
我认为这是因为我理解函数和构造函数不应该改变类/结构的底层字节布局,这是正确的吗?
谢谢
最好从该结构体派生并定义所需的所有构造函数。修改第三方库和复制粘贴定义不是一个好主意。
typedef struct
模式来自C. In [older?]C, struct _Something
不允许您使用_Something
作为类型:
//_Something x;//not allowed
struct _Something x; //ok
使用typedef,可以用自然的Something x
方式定义变量,而不用struct
的负担。
typedef struct ...
是从C
而不是C++
派生出来的,以便使用struct
s的简写。有没有可能第三方库是用C编写的?
我不建议像你那样使用reinterpret_cast。我建议您创建一个小包装器类来封装Example
结构体。这样更安全,可以省去很多调试的痛苦。
HTH
你的结构有一个构造函数。编译器为你生成了一个无参数的构造函数,这正是boost::序列化所需要的。
Why not struct Example { ... } ?
struct Example {...};
是在c++中定义struct
的方式,而typedef
形式是旧的C风格。
functions and constructors shouldn't change the underlying byte layout of the
class/struct
,视情况而定。函数与数据分开存储在文本部分中。所以添加一个正常的功能不会影响你的struct
的大小和布局。然而,如果有任何virtual
函数,一个"隐藏的"VPTR将被添加到你的类中。因此,布局可能与没有虚函数的布局非常不同。
Is it safe to just change my version of the 3rd party header file by adding a
constructor to the struct definition? Or alternatively, to just copy that definition
to my own code base, rename it, add a constructor, and reinterpret_cast to it?
我强烈建议您使用而不是来复制定义。这是一个非常糟糕的主意,尤其是当这是你无法控制的第三方课程时。如果有一天他们改变了它的定义呢?有几种方法可以处理它。例如,要么使用聚合,要么使用继承。实际上,在这种情况下,我认为聚合的使用更出色。
// The layout of this struct is the same as
// that of struct Example
struct MyExample
{
Example m_ex;
MyExample(int member)
{
m_ex.member = member;
}
//..
};
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- TraciMobility::getExternalId 将自定义模块添加到示例中时出错Veins_Inet (Omne
- 如何在自定义对象的<<运算符中添加自定义前缀
- 如何在Qt C++中向自定义控件添加属性?
- CMake 添加和删除宏定义以编译共享库/可执行文件
- ctypes,添加静态库时未定义的符号
- 将自定义样式添加到 QTableview 中添加的按钮
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 如何将定义添加到 moc_predefs.h.
- 选择性地将功能定义添加到Python名称空间
- 预处理器定义/添加新配置文件
- 在c++中为类的定义添加新变量
- MFC 自定义 - 添加新工具栏
- 如何在运行时从 Glade 定义添加 Gtk::笔记本选项卡
- g++-D标志将定义添加到对象文件中
- 向第三方类/结构定义添加构造函数