1

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

  1. 它是一个函数对象。
  2. 它的返回类型和参数类型是从给定的“基本”函数类型作为模板参数自动“继承”的。“基本”函数类型可以是(函数指针/boost::function/boost::bind)之一
  3. 它使用给定类型的函数对象进行初始化。
  4. 当它被调用时(因为你可以调用原始函数),它能够将调用存储到 boost::bind 之类的东西中,并将其传递到其他地方(有意地,一个线程安全队列,以便可以调用它稍后,在另一个线程中。),然后返回调用的结果。

现在,我的问题是如何(甚至可能)使用模板 teq 创建这个(仿函数)类,并将未知参数列表传递给绑定。

提前致谢。

4

1 回答 1

2
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);
}

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

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

于 2013-03-22T04:55:30.217 回答