有没有办法缓存虚函数调用。虚函数调用可能不是性能瓶颈。但作为一个思想实验,如果我们“缓存”虚拟函数调用,它会改善性能还是让它变得更糟?
class B {
public:
virtual int func(int a) = 0;
};
class D1 : public B {
public:
int func(int a)
{
return 0;
}
};
typedef std::function<int(int)> func_type;
func_type gv;
template <typename T>
void addFuncCache(B *b)
{
func_type f = [=] (int a) ->int {
return static_cast<T *>(b)->T::func(a);
};
gv = f;
}
int main()
{
D1 d1;
addFuncCache<D1>(&d1);
gv(10);
}
这里打电话给
gv(10);
比
更快B *bp = &d1; bp->func(10);
或者情况更糟。