考虑我有一系列派生类例如以下所列:继承和成员函数
class A
{
...
}
class B1 : public A //there may be many B's here say, B2, B3 etc
{
...
}
class C1 : public B1 //may be more C's as well
{
...
}
我想把所有在单个容器中的对象的,因此,所有的将类型类A
的。
假设我想为类C1
添加一个函数,那么最好的方法是什么?我的选择是在基类A
中引入它,并在C1
中写入所需的实现,或者,我可以在C1
中引入它并进行动态转换以访问它。哪一个是首选?动态铸造是否太昂贵? (我的主要约束是运行时间。我在基类中有一个标志来指示它是什么类型的派生对象,因此我不必动态地转换容器中的每个对象。是否将不必要的函数添加到基类会导致?在恶劣的指令高速缓存使用)
没有人能告诉你动态铸造是否“太贵”,因为你可以负担得起的是主观的。由于这看起来就是你所追求的(“我的主要约束就是运行时间”),我会建议这样做,并对结果进行基准测试,看看它是否对于特定的硬件和编译器优化和用例来说太昂贵,外部限制和... – Altainia
使接口太广泛是糟糕的设计,因此是向下广播,您可能需要一个指向更多特定接口的额外集合。 – imreal
您可以使用具有访问者模式的“变体”。 – AndyG