我遇到了这个问题,其中保存了C++函数指针以及一组参数,以便在稍后调用它。调用代码不知道函数的类型和参数。在我的应用程序中保存和调用函数指针和参数是非常关键的性能指标。接口应该是这个样子:保存函数指针+参数供以后使用
void func(int a, char * b);
call_this_later(func, 5, "abc");
一个简单的解决办法是把所有的信息在一个仿函数,要求每个调用的函数不同的typedef。 C++ 11允许我使用可变参数模板来做到这一点,所以这没问题。
由于调用函数的类型在调用点是未知的,因此似乎有必要为这些函子创建一个虚拟基类,并使用虚函数调用调用函子。虚函数调用+堆分配的性能开销太高(我正在尽可能少地使用汇编指令来实现这个习惯用法的边界)。所以我需要不同的解决方案。
任何想法?
我相信`:: boost :: function`和`:: std :: tr1 :: function`完全符合@Hans不想做的事情。我认为他们使用虚拟功能和动态分配。 – Omnifarious 2011-02-07 21:36:16