我到处寻找(现代 C++ 设计和合作),但我找不到一种很好的方法来存储一组接受不同参数并在不同类上操作的回调。我需要这个,因为我希望我的应用程序的每个对象都有可能将其方法之一的执行推迟到一个主Clock
对象,该对象跟踪当前时间,可以在正确的时刻调用这个方法。我的目标是这样的代码:
在 的void executeAction1Deferred(int time, int arg1, bool arg2)
方法中class1
,time 是未来想要的执行时间,应该是这样的:
Clock::defer(time, Class1::action1, this, arg1, arg2);
在Clock::defer(??? what signature ????)
表示此任务的对象中,存储在优先级队列中,其中时间是 Key。对于每个Clock
量程,然后遍历任务列表,并执行需要在此量程中运行的任务。请注意,我使用“defer”作为静态函数,因为我打算Clock
使用单例对象,但它也可以是成员函数,这只是选择问题。
我曾想过使用void*
来保留可变数量的参数,但是让我的action1()
方法接受 avoid*
是非常糟糕的,因为每次我直接使用这个函数而不推迟它时,我都需要为参数制作一个结构。
我过去多次面临这个问题,但我从来没有找到一个真正体面的解决方案。请注意,作为一个小型多平台项目,对于没有经验的程序员可以扩展它的简单性是必不可少的,我不想使用 boost。但是,我们处理的平台的每个编译器都有std::tr1
绑定。问题是:如何定义一个泛型函数的容器,每个函数都接受可变数量的参数(最多 N ~ 5 个),并且是不从公共虚拟类派生的对象的不同成员方法?谢谢