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
的尺寸和佈局。但是,如果有任何功能,您的班級中將添加一個「隱藏的」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;
}
//..
};
你確定你需要一個構造函數嗎? –
@Andreas:也許我是誤解,但在[這裏](http://www.boost.org/doc/libs/1_47_0/libs/serialization/example/demo.cpp)是以下評論:_ // every可序列化的類需要constructor_ – Cookie
如果不提供構造函數,編譯器將添加默認值。 –