Je suis en train d'écrire un wrapper en C++/CLI (VS 2015) pour le code C++ donné afin d'utiliser enfin la dll managée générée en C#. J'ai donc créé une classe managée qui appelle une classe native. Cette classe native est liée au code C++ donné grâce à une méthode factory qui renvoie un unique_ptr<>.
Maintenant, je suis bloqué car le code C++ a un rappel:
Callback(std::function)
Résultat est de type
std::vector>
Questions:
-
Comment puis-je mapper l'argument de rappel std::function<> en C++/CLI?
-
Où et comment dois-je transformer la structure résultante en C++ (vector de paires) en structure de données .NET (liste de tuples) en termes de rappel pour y accéder en C#?
-
Est-il possible d'écrire des expressions lambda (avec des collections .NET) qui se mapperont à la structure de données non managée (vector)?
unsigned int cnt = 0; nativeClass->Callback([&cnt] (const Result &v) { auto it = d::max_element(v.begin(), v.end(), [](const Pair &a, const Pair &b) { return a.second < b.second; }); // faire quelque chose avec l'itérateur it // … cnt++; });
Dois-je donc écrire un wrapper d'expression lambda à cet effet?