假设存在如下基类:
class foo
{
int x0;//private variable should not be a participant in derived union
//(unless bar is a friend)
protected:
int x1;
};
继承它的派生类:
class bar : foo
{
protected:
union
{
//int foo::x1;
char[4] x2;
};
};
我想放基础成员x1
并在派生类的成员联合中重用它的空间。
通常,派生类可以与基类成员一起使用,除了重用它们的空间外,还可以做任何事情。
编辑: “魔术”,我并不是指任何特定于供应商的扩展程序。
答案 0 :(得分:2)
你可以这样做:
class bar : foo
{
protected:
char* x2() { return reinterpret_cast<char*>(&x1); }
};
这是允许的,因为严格别名对char*
有例外。
我认为除此之外你还可以做很多事情(例如,如果你想使用char*
以外的类型),除了重新安排类层次结构以将可联合部分与不可联合的部分分开foo
。