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);
}
Как это работает? Что произойдет, если вызываемая функция вызовет функцию? –
Возможный дубликат [Обратные вызовы в арифметических функциях арифметики?] (Http://stackoverflow.com/questions/2554999/callbacks-in-thrift-asynchronous-functions) – JensG