Apache Thrift a été conçu pour permettre des appels RPC entre les différentes plates-formes et environnements. Donc passer quelque chose comme std::function<int(int)>
ne peut tout simplement pas être supporté: comment la fonction native définie en C++ pourrait-elle être transférée en JavaScript et vice versa?
(BTW: même si c'était en quelque sorte possible, c'est généralement une mauvaise idée, pour permettre aux utilisateurs du serveur d'injecter du code dans ii - pour des raisons de sécurité).
Si vous voulez une fonction unique avec plusieurs options de traitement - créez une énumération et transmettez-la à cette fonction. Mieux encore - définissez plusieurs fonctions dans votre service. Si vous voulez vraiment permettre à l'utilisateur de traiter échantillon par échantillon: soit renvoyer tous les échantillons à l'utilisateur et les traiter en conséquence dans le client, soit, s'il y a trop de données à transmettre par réseau, fournir le service "itérateur":
struct MyPair {
i32 first;
i32 second;
}
typedef i32 QueryId;
service MyService {
QueryId startProcessing();
MyPair getNextSample(1: QueryId id);
}
Comment cela fonctionnerait-il? Que se passerait-il si l'appelé invoquait la fonction? –
Copie possible de [Callbacks dans Thrift Asynchronous Functions?] (Http://stackoverflow.com/questions/2554999/callbacks-in-thrift-asynchronous-functions) – JensG