c++ - sizeof(*this) 和结构继承

标签 c++ inheritance struct sizeof

假设我有一个如下所示的结构:

struct ParentStruct
{
   virtual void XYZ()
   {
      getSize(sizeof(*this));
   }
   int memberX;
}

还有另一个继承父结构的struct:

struct ChildStruct : public ParentStruct
{
    int memberY;
    int memberZ;
}

假设 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;
};

这应该会产生想要的效果。

关于c++ - sizeof(*this) 和结构继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910377/

相关文章:

c++ - 低级库是如何制作的?

c++ - 将 dll 链接到静态库并将其加载到链接到同一静态库的应用程序中

c# - 从抽象类引用继承类

json - 为什么 Go json.Marshal 拒绝这些结构标签? json 标签的正确语法是什么?

memory-management - 如何在 SwiftUI 中再次初始化 View ?

c - int数组到C中的struct数组

c++ - 读取文件处理 C++ 时出错

c++ - 将元组转换为 "triangular"元组

.net - 继承和 List<> 的问题

java - 根据对象的类型调用适当的函数