我有一个普通的CRPT(请不要被访问限制所分散注意力 - 问题与此无关):
template<class Derived>
class Base {
void MethodToOverride()
{
// generic stuff here
}
void ProblematicMethod()
{
static_cast<Derived*>(this)->MethodToOverride();
}
};
这通常被用于以下方式:
class ConcreteDerived : public Base<ConcreteDerived> {
void MethodToOverride()
{
//custom stuff here, then maybe
Base::MethodToOverride();
}
};
现在我对
static_cast
感到困扰。我需要一个向下转型(而不是向上转型),因此我必须使用显式转换。在所有合理的情况下,转换将是有效的,因为当前对象确实是派生类的。
但是,如果我以某种方式更改了层次结构,那么转换现在将变得无效吗?
我是否可以强制执行编译时检查,以确保此情况下显式向下转换是有效的?