我有一些代码具有这样的结构:
([doStuff2()
将通过Class1
指针调用。它将在循环中调用doStuff()
。有多个类,例如Class3
,因此Class2
将具有多个模板实例。]
struct Class1{
virtual void doStuff2() = 0;
};
template<typename T> struct Class2 : public Class1{
virtual void doStuff() { /*code*/};
void doStuff2() override {
// Call this in a huge loop.
doStuff();
}
};
struct Class3 : public Class2<SomeType>{
void doStuff() override final { /*code*/};
};
//...
void someFunc(Class1 *p_class1){
p_class1->doStuff2();
}
我的问题:是否可以通过非虚拟方式调用doStuff()
,因此不会产生开销?在Class2
中将其设置为纯虚拟并在Class3
中将其设置为最终帮助吗?
在这样的循环中调用同一个虚函数是否具有虚函数的所有性能问题?
这些评论对为什么这可能是过早的优化有一些好的建议,但是可以直接回答您的问题: