我正在构建一个简单的调度程序,它将函数作为参数,将它们放入队列并在以后执行它们。该类旨在从inherited开始,稍后将enqueue(function_ptr)
从子类的方法中调用。
我的问题是调度将基于时间发生,并且用2ms中断来测量。可以从中断处理程序订阅回调,但是那些只返回void*
到已订阅的对象。
那么我如何才能知道传回的对象的类型是什么,以便我可以将其转换并调用适当的方法?
我在class Scheduler
创建时考虑了模板参数,但回调函数并不知道模板参数是什么。那么也许某种方式将Scheduler
的子类存储在成员变量中 - 将object
转换为Scheduler
并查看该字段,将其转换为最终类型?我想这可以通过全局enum
可调度类来解决,但这似乎是一个糟糕的解决方案。
或者我的整个方法可能是错的?
以下是调度程序的一些代码。我没有发帖,因为可能我的整个方法都是错误的。
class Scheduler {
private: std::vector<QueueItem> m_queue;
protected: void schedule(void *foo_ptr);
public: void callback_2ms_passed(); // Note that we are getting only 'this' as a parameter.
}
class Child1 : public Scheduler, public OtherClasses {
void slow_foo(bool execute_immediately = false) {
if(!execute_immediately)
schedule(slow_foo);
else
// Do slow stuff.
}
}
这个想法是调度程序决定何时调用慢函数,并使用参数true
进行调整,以便进行实际计算。
答案 0 :(得分:0)
您要搜索的是代表。由于您不想使用boost或其他提到的委托实现,您可以试试这个。
SomeObject obj;
delegate d = delegate::from_member<SomeObject,
&SomeObject::someMethod>(&obj);
您的计划程序应使用向量中的委托对象。 看看这里:http://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates