C++ 向第三方类/结构定义添加构造函数

C++ 向第三方类/结构定义添加构造函数,c++,C++,第三方库的结构定义为 typedef struct _Example { int member; } Example; 作为一个附带问题,只是出于兴趣,为什么要这样定义?为什么不结构示例{…} 无论如何,我想用boost::serialization序列化信息,为此需要一个构造函数。通过向结构定义添加构造函数来更改我的第三方头文件版本是否安全?或者,将该定义复制到我自己的代码库中,重命名它,添加构造函数,然后重新解释它 我假设这是因为我理解函数和构造函数不应该更改类/结构的底层字节布局,这

第三方库的结构定义为

typedef struct _Example
{
  int member;
} Example;
作为一个附带问题,只是出于兴趣,为什么要这样定义?为什么不
结构示例{…}

无论如何,我想用boost::serialization序列化信息,为此需要一个构造函数。通过向结构定义添加构造函数来更改我的第三方头文件版本是否安全?或者,将该定义复制到我自己的代码库中,重命名它,添加构造函数,然后重新解释它

我假设这是因为我理解函数和构造函数不应该更改类/结构的底层字节布局,这是正确的吗


谢谢

typedef struct…是从
C
派生出来的,而不是
C++
来使用
struct
s的缩写。第三方库是否可能是用C编写的

我不建议像您尝试的那样使用reinterpret_类型转换。我建议您创建一个小包装器类来封装
示例
结构。这样做更安全,并且可以省去很多调试的痛苦

struct示例{…}是如何在C++中定义<代码>结构> /代码>,而<代码> TyPulf窗体是旧的C样式。

functions and constructors shouldn't change the underlying byte layout of the 
class/struct
那要看情况。函数与数据分开存储在文本部分。因此,添加普通函数不会影响
结构的大小和布局。但是,如果存在任何
虚拟
函数,则会在类中添加一个“隐藏”的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;
   }
   //..
};

最好从该结构派生并定义所需的所有构造函数。修改第三方库和复制粘贴定义不是一个好主意

typedef struct
模式来自C。在[older?]C中,
struct\u Something
不允许您将
\u Something
用作类型:

//_Something x;//not allowed
struct _Something x; //ok

使用typedef,可以用自然的
某物x
方式定义变量,而不必承担
结构的负担。

你的结构有一个构造函数。编译器为您生成了一个无参数构造函数,这正是boost::serialization所需要的。

您确定需要构造函数吗?@Andreas:也许我误解了,但是在下面的注释中://每个可序列化类都需要一个构造函数如果您没有提供构造函数,编译器将添加默认值。@Cookie:注释有误导性,应该是://每个可序列化类都必须是默认可构造的。这个结构是,所以这里没有问题。@Matthieu:啊,我的错,解决了问题。谢谢
//_Something x;//not allowed
struct _Something x; //ok