2013-03-22 31 views
0

功能的代理我希望做一個「函數代理」中指出:C++的執行控制

  1. 這是一個函數對象。
  2. 它的返回類型和參數類型自動從給定的「基本」函數類型作爲模板參數「繼承」 。函數類型可以是(函數指針/ boost :: function/boost :: bind)
  3. 函數類型可以是其中一個函數類型,它用給定類型的函數對象進行初始化。
  4. 當它被調用時(因爲你可以調用原始函數),它能夠將調用存儲到像boost :: bind之類的東西,並將它傳遞到其他地方 (故意爲線程安全隊列,所以它可以稍後調用,在另一個 線程中),然後返回調用的結果。

現在,我的問題是如何(甚至有可能)使用模板teq創建這個(函子)類 ,並傳遞未知參數列表進行綁定。

在此先感謝。

回答

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

我還沒有真正測試過這個。

你可能會想要一些異步的,但我會留給你。

+0

謝謝。而且...有什麼辦法可以在C++ 98中做到這一點(我知道這是一個愚蠢的問題,但...)? – tdihp 2013-03-22 05:31:03

+0

這樣做沒有可變參數模板會很困難,除非你知道什麼樣的參數你的函數將採取什麼。 – dspeyer 2013-03-22 16:58:18