pointers - 如何将类型存储为成员?

标签 pointers c++11 types

我正在构建一个简单的调度程序,它将函数作为参数,将它们放入队列中并稍后执行它们。该类的目的是 inherited ,然后从子类的方法中调用 enqueue(function_ptr)

我的问题是调度将根据时间进行,并且是通过 2ms 中断来测量的。人们可以从中断处理程序订阅回调,但这些回调仅向订阅的对象返回一个 void*

那么我如何知道传回的对象的类型是什么,以便我可以转换它并调用适当的方法?

我在创建class Scheduler时考虑了模板参数,但是回调函数不知道模板参数是什么。因此,也许可以通过某种方式将 Scheduler 的子类存储在成员变量中 - 将 object 转换为 Scheduler 并查看该字段,将其转换为最终类型?我想这可以通过可调度类的全局枚举来解决,但这似乎是一个糟糕的解决方案。

或者也许我的整个方法是错误的?

<小时/>

这里是调度程序的一些代码。我没有发帖,因为可能我的整个方法都是错误的。

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 来执行,以便进行实际计算。

最佳答案

您正在寻找的是代表。由于您不想使用 boost 或其他提到的委托(delegate)实现,您可以尝试这样做。

SomeObject obj;
delegate d = delegate::from_member<SomeObject, 
              &SomeObject::someMethod>(&obj);

您的调度程序应在向量中使用委托(delegate)对象。 看看这里:http://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates

关于pointers - 如何将类型存储为成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892595/

相关文章:

c - 在前面取消引用 (void *)

c++ - 对模板中的所有其他类型执行 static_assert

java - 如何通过jdbc在postgres中获取数组基类型

MySQL 主键字段类型

C++ ifstream::read 混淆

C++ 简单指针传递

c++ - 通过 std::bind 传递右值

c++ - std::tmpfile() 没有选择 TMPDIR 位置

Java 转换之谜 - Class.cast 与强制转换运算符

c - 在不使用任何指针的情况下反转单链表