Ada*_*nko 20 c++ casting upcasting private-inheritance
我可以这样做吗?
class A { ... };
class B : private A
{
const A &foo() const
{
return *((const A *)this);
}
};
Run Code Online (Sandbox Code Playgroud)
我可以从基类中私有地继承并将其强制转换为其基类的公共版本吗?如果没有虚拟方法,我可以这样做吗?
我的猜测是肯定的,但我想确保它安全/便携.
Bat*_*eba 15
是的,您可以:§5.4/ 7标准:
...可以使用显式类型转换的强制转换表示法执行以下static_cast和reinterpret_cast操作(可选地后跟const_cast操作),即使基类类型不可访问:
指向派生类类型的对象的指针或派生类类型的左值可以分别显式地转换为指针或对明确的基类类型的引用;
但尽量不要因为它违背私人继承的目的.
是的,这是明确允许的.Alexandrescu在Modern C++ Design中广泛使用了这种基于策略的设计方法:
template <typename Policy>
class foo : Policy
{
public:
void do_something()
{
Policy & p = *this;
p.do_something();
}
};
Run Code Online (Sandbox Code Playgroud)
因此,尽管用例可能有限,但有一些用例.
| 归档时间: |
|
| 查看次数: |
2974 次 |
| 最近记录: |