用C ++缓存虚函数调用

时间:2016-10-31 03:07:23

标签: c++ performance caching virtual-functions

有没有办法缓存虚函数调用。虚函数调用可能不是性能瓶颈。但作为一个思想实验,如果我们“缓存”虚拟函数调用,它会改善性能还是让它变得更糟?

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);

或者情况更糟。

0 个答案:

没有答案