我有一个 Base
类和一个 Derived
类。 Base
类的唯一目标是确保 Derived
实现了一个成员函数。
struct Base
{
virtual void f() = 0;
};
struct Derived : Base
{
void f() override final {}
};
我不会对这个类进行多态处理,也就是说,我只是像这样在栈上实例化Derived
类型的对象:
Derived obj;
我需要进行数百万次操作。
编辑:同时只有几个实例存在(不会导致堆栈溢出)。
在这里是否创建了 vtable
(我猜是在编译时)?如果我不使用它,那么是否对我有影响(或者我是否以某种方式使用它)?使用这种设计是否有任何额外的开销需要考虑?也许有其他方法可以确保编译器在 Derived
没有实现 f()
时发出警告?
Base
中省略f()
呢?如果Derived
没有实现f()
,那么obj.f()
将无法编译通过。 - EvgDerived
的大小。在我的情况下,它是8个字节,这意味着有一个虚表指针。_也许还有另一种方法可以确保编译器在Derived
没有实现f()
时发出警告吗?_当您为任何Derived
对象调用f
而没有提供f
时,编译将失败。还请参阅:是否可能编写一个模板来检查函数的存在?。您可以编写一个元函数来检查f
的存在,并使用它,例如使用静态断言进行更好的诊断。 - Daniel Langr