2016-05-21 8 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

Возможный дубликат [Обратные вызовы в арифметических функциях арифметики?] (Http://stackoverflow.com/questions/2554999/callbacks-in-thrift-asynchronous-functions) – JensG

ответ

1

Apache Бережливость была разработана, чтобы позволить RPC вызовы между различными платформами и средами. Так что передача чего-то вроде std::function<int(int)> просто не может быть поддержана: как встроенная функция, определенная на C++, может быть перенесена на JavaScript и наоборот?

(BTW: даже если это было возможно, это вообще плохая идея, чтобы пользователи сервера могли вводить некоторый код в ii - по соображениям безопасности).

Если вы хотите использовать одну функцию с несколькими вариантами обработки - создайте некоторое перечисление и передайте ее этой функции. Еще лучше - определить несколько функций в вашем сервисе. Если вы хотите действительно разрешить пользователю обрабатывать образец по образцу: либо возвращать все образцы пользователю, либо обрабатывать его соответственно на клиенте, либо, если слишком много данных для передачи через сеть одновременно, предоставить услугу «итератор»:

struct MyPair { 
    i32 first; 
    i32 second; 
} 

typedef i32 QueryId; 

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