Re: Common base class, reinterpret_cast, and aliasing
On Mar 26, 8:46 am, guillaume.melqui...@gmail.com wrote:
On 23 mar, 23:43, Lance Diduck wrote:
So for your example, the reason it is considered a poor application of
reinterpret_cast is that I could change just about anything -- use
virtual inheritance, multiple inheritance, add vritual functions, add
member, change compilers, change compiler options, and suddenly you
aren't lucky anymore.
Obviously. But notice that my example was explicitly using neither
virtual functions nor multiple inheritance nor virtual inheritance.
Moreover, the base class is guaranteed to be at the beginning of the
derived class A and B in the example (I would be surprised if you can
find a compliant compiler such that this property does not hold true).
I only expected comments about my example, not about more complicated
cases for which I'm well aware that the typecast won't work.
Best regards,
Guillaume
OK to specifically get the behavior you are looking for, that does not
rely on object layout details, but only language rules:
struct base
{
int value;
int get() const { return value; }
void set(int v) { value = v; }
};
struct A: virtual base
{
void doA() { set(42); }
};
struct B: virtual base
{
int doB() { return get(); }
};
struct C:A,B{};
int main()
{
C c;
A& a=c;
a.doA();
//B &b = dynamic_cast<B &>(static_cast<base &>(a));
B &b = dynamic_cast<B &>(a);
return b.doB();
}
For some reason C++ designers have a gag reflex when it comes to
virtual inheritance, but "commom base class" is exactly what it does.
Lance
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]