如何将类型存储为成员?

时间:2014-11-12 17:10:43

标签: pointers c++11 types

我正在构建一个简单的调度程序,它将函数作为参数,将它们放入队列并在以后执行它们。该类旨在从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进行调整,以便进行实际计算。

1 个答案:

答案 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