我有一个多态对象的指针Base* base_ptr
。是否有可能找出所述对象的动态类型的大小?
AFAIK,sizeof(*base_ptr)
的大小与base_ptr
的静态类型相同。我开始怀疑这是不可能的,但也许我忽视了一些事情。
注意:我知道我可以在我的类型层次结构中添加一个虚函数来返回大小,但在我的情况下这不是一个理想的解决方案。
编辑:sizeof(base_ptr)
- > sizeof(*base_ptr)
答案 0 :(得分:12)
不,你不能用C ++做到这一点 - 至少以便携方式。最好的办法是在每个班级中实施getSize()
成员函数。
答案 1 :(得分:6)
是。您可以在基类中实现一个返回大小的虚函数:
class Base
{
virtual int size() { return sizeof(Base); }
};
class Derived : public Base
{
virtual int size() { return sizeof(Derived); }
};
//......
Base* b = new Derived;
int size = b->size(); //will call Derived::size() and return correct size
答案 2 :(得分:2)
如果可能,您可以使用CRTP idiom,如我在此处所述:https://stackoverflow.com/a/14730166/908336