Re: Get address of whole instance with multiple inheritance
On Dec 10, 5:58 am, "dustin.fri...@googlemail.com"
<dustin.fri...@googlemail.com> wrote:
is there any way to get a pointer to the "whole" instance after
casting to a base class.
i.E.:
class Interface1 {
public:
virtual void foo() = 0;
};
class Interface2 {
public:
virtual void bar() = 0;
};
class Interface3 {
public:
virtual void baz() = 0;
};
class Impl : public Interface1, public Interface2, public Interface3 {
public:
virtual void foo();
virtual void bar();
virtual void baz();
};
int main(int argc, char** argv) {
Impl* impl = new Impl();
Interface1* if1 = impl;>
Interface2* if2 = impl;>
Interface3* if3 = impl;
if1->foo(); // Impl::foo() : this = 0x603010
if2->bar(); // Impl::bar() : this = 0x603010
if3->baz(); // Impl::baz() : this = 0x603010>
}
During a method call C++ will use the vtable (I think) but is there
any way to get the address of the whole instance (the address returned
by new) without knowing the concrete class.
Yes. A dynamic_cast applied to a polymorphic object pointer will
return a pointer to its most derived object. For example:
void *ptr = dynamic_cast<void*>(if2);
should return a pointer to the Impl object.
Greg
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]