我真的很想在多态类的声明中说“不要编写任何可以转换为此类类型的代码”。因为我知道没有人会动态地转换到那个类,所以为什么要妥协效率。
struct Able{ virtual void do() = 0; };
struct A : Able{
/* no dynamic_cast for me */
void do() override{}
};
struct Able2{ void do2() = 0; };
struct B : A, Able2{
/* no dynamic_cast for me */
void do2() override{}
};
Able *b = new B;
assert(dynamic_cast<Able2*>(b));
assert(dynamic_cast<A*>(b) == nullptr);
assert(dynamic_cast<B*>(b) == nullptr);
我的问题是基于这样的知识,即随着从多态类型的每次继承,不可见的动态转换函数会随着派生类的类型检查的一个条目而变得更大。