c++ - sizeof 已经从 base 派生

标签 c++ sizeof

是否可以返回一个已经从基类/结构派生的类的 sizeof

恕我直言,类的大小是其自身的一种属性,就像人的体重一样。但我不想在每个类中都编写相同的函数。

非常感谢
糟糕 PS:所以代码让我的问题更清楚:

template <typename T>
struct StructBase {
    size_t size<T>(){
        return sizeof(T);
    }
};

struct MyStruct: public StructBase<MyStruct> {
    double d1;
    double d2;
    double d3;
    MyStruct(): d1(0), d2(0), d3(0){}
    //I do not want to do this here
    //size_t size(){ //return size<MyStruct> ;}
};

int main(void) {
   MyStruct m;
   std::cout << m.size(); //nop ?!?
}

最佳答案

由于基类不应该知道从它们派生的类(这会产生循环依赖),基类方法甚至不知道派生类中添加了哪些额外字段。此外,sizeof 不能是多态的——它只适用于静态类型和结构。因此,尝试像 sizeof(*this) 这样的东西是没有意义的。

所以它不会起作用。

更新:好吧,现在这是一个完全不同的问题。使用模板,这甚至可以 FWIW 工作(我没有 IDE 来尝试)。但是请注意,现在您实际上拥有一个带有类型参数的模板函数,该类型参数可以是任何东西——仅限于派生类,仅限于您,程序员。总的来说,我看不到您使用此解决方案实际上赢得了什么 - 这也可能是由于缺乏上下文。

关于c++ - sizeof 已经从 base 派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735918/

相关文章:

c++ - 使用未声明的标识符 GluBuildMipMaps (emscripten)

c++ - 如何在MFC中的CArray中使用CArray?

c++ - Typedef 二维数组的大小

C 中数组大小的混淆

c++ - 为什么我要打开一个没有 std::ios::binary 的文件 (std::ifstream)?

具有相同布局的不同类型之间的C++转换

c - 为什么第二个元素被打印为1?

c - 关于 sizeof(char *) 和 sizeof(char[])

c - 在确定数组大小时,括号是否有所不同?

C++访问冲突读取位置