用于执行控制的c ++函数代理

时间:2013-03-22 04:16:00

标签: c++ templates boost bind functor

我想制作一个“功能代理”:

  1. 这是一个功能对象。
  2. 它的返回类型和参数类型是自动“继承”的 从给定的“base”函数类型作为模板参数。 “基地” 函数类型可以是(函数指针/ boost :: function / boost :: bind)
  3. 之一
  4. 使用给定类型的函数对象进行初始化。
  5. 当它被调用时(因为你可以调用原始函数),它能够 将调用存储到boost :: bind之类,并将其传递给其他地方 (故意,一个线程安全的队列,以便以后可以在另一个队列中调用它)  thread。),然后返回调用的结果。
  6. 目前,我的问题是如何(甚至可能)创建这个(仿函数)类 使用模板teq,并将未知参数列表传递给bind。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

template<typename R, typename... ARGS>
class Proxy {
  typedef std::function<R(ARGS...)> Function;
  Function f;
 public:
  Proxy(Function _f) : f(_f) {}
  R operator(ARGS... args) {
    std::function<R> bound = std::bind(f, args...);
    send_to_worker_thread(bound);
    wait_for_worker_thread();
    return worker_thread_result();
  }
};

// Because we really want type deduction
template<typename R, typename... ARGS>
Proxy<R,ARGS...>* newProxy(R(*x)(ARGS...)) {
  return new Proxy(std::function<R,ARGS...>(x);
}

我实际上没有测试过这个。

你可能想要异步的东西,但我会把它留给你。