gpt4 book ai didi

c++ - 给定对象的父类(super class)指针,如何获取对象的大小?

转载 作者:行者123 更新时间:2023-12-02 10:37:45 25 4
gpt4 key购买 nike

假设我有一个Foo类,以及Bar1,Bar2和Bar3的子类。子类可能会添加额外的字段。

实际上,我想要适用于Foo *的sizeof(),无论它是基类的对象还是任何子类的对象。

显然,我可以制作自己的SizeOf()方法,并要求所有(添加字段的)子类重写此方法,以返回更新的SizeOf()。但这不是很漂亮,它需要工作,并且如果您忘记重写该方法,或者覆盖但意外地使用了错误的sizeof(),则可能导致令人困惑的错误。 (例如,实现Bar2::Sizeof() { return sizeof( Foo ); })。有更好的方法吗?

我希望为此项目使用C++ 17,但希望对任何C++版本的讨论感兴趣。

最佳答案

据我所知,如果对象的动态类型给出基本指针,则没有直接获取大小的方法。

您可以创建一个从std::type_index到该大小的关联映射,并使用typeid从基本指针获取std::type_index。剩下的工作是确保将每个派生类型添加到 map 。

最小化每个类工作量的一种方法是创建一个类模板,该模板具有一个静态成员,该成员具有一个构造函数,该构造函数将参数类型添加到映射中。这样,程序员在创建新的派生类型以支持此功能时所要记住的就是用新类型作为模板参数实例化该模板。

关于c++ - 给定对象的父类(super class)指针,如何获取对象的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59524912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com