2016-05-21 90 views
1

我想使用FuncType作爲foo函數的參數類型。節儉支持嗎?如何在FuncType中定義類型?apache節點是否支持函數變量作爲參數?

struct FuncType { 
    // std::function<std::vector<std::pair<int, int>>(const std::string &)>; 
    // how to define here? 
} 

service WorkerService { 
    bool foo(1:FuncType func) 
} 
+0

它會如何工作?被調用函數會發生什麼? –

+0

[Thrift異步函數中的回調函數?]的可能重複(http://stackoverflow.com/questions/2554999/callbacks-in-thrift-asynchronous-functions) – JensG

回答

1

阿帕奇節儉被設計爲允許RPC調用不同的平臺和環境之間。所以傳遞類似std::function<int(int)>這樣的東西就不能被支持:C++中定義的本地函數如何被傳遞到JavaScript,反之亦然?爲了安全起見,允許服務器的用戶向ii注入一些代碼通常是個壞主意。)。

如果您希望具有多個處理選項的單個函數 - 創建一些枚舉並將其傳遞給該函數。更好 - 在你的服務中定義多種功能。如果您想真正允許用戶按樣本處理樣本:將所有樣本返回給用戶並在客戶端進行相應處理,或者如果有太多數據一次通過網絡傳遞,請提供「迭代器」服務:

struct MyPair { 
    i32 first; 
    i32 second; 
} 

typedef i32 QueryId; 

service MyService { 
    QueryId startProcessing(); 
    MyPair getNextSample(1: QueryId id); 
}