是否可以返回一个已经从基类/结构派生的类的 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/