Tim*_*per 6 c++ inheritance struct sizeof
说我有struct类似以下内容:
struct ParentStruct
{
virtual void XYZ()
{
getSize(sizeof(*this));
}
int memberX;
}
Run Code Online (Sandbox Code Playgroud)
另一个struct继承父结构:
struct ChildStruct : public ParentStruct
{
int memberY;
int memberZ;
}
Run Code Online (Sandbox Code Playgroud)
假设sizeof(int) == 4,是有可能有一个值12传递给函数getSize()从子结构(我目前得到的值调用时4)?
我宁愿不必覆盖XYZ()所有的子结构,因为我会有很多子结构.
正如其他人所说,类型this是它所使用的类的静态类型.但是,你可以做一些模板技巧:
struct Parent{
virtual void xyz(){ getSize(sizeof(Parent)); }
int mem1;
};
template<class D>
struct Intermediate : public Parent{
virtual void xyz(){ getSize(sizeof(D)); }
};
struct Child : public Intermediate<Child>{
int mem2, mem3;
};
Run Code Online (Sandbox Code Playgroud)
这应该给出想要的效果.
您可以使用模板来解决此问题:
template <typename Child>
struct ParentStruct
{
virtual void XYZ()
{
getSize(sizeof(Child));
}
int memberX;
}
struct ChildStruct : public ParentStruct<ChildStruct>
{
int memberY;
int memberZ;
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以告诉父结构其子结构是谁 - 这不是一个超级干净的解决方案,但它可以完成工作并避免重复 getSize 代码。