Я пишу обертку в C++/CLI (VS 2015) для данного кода на C++, чтобы использовать, наконец, сгенерированную управляемую dll в C#. Поэтому я создал управляемый класс, который вызывает родной класс. Этот родной класс ссылается на данный код C++ из-за фабричного метода, который возвращает unique_ptr <>.Сопоставление специфических функций C++ с C++/CLI
Теперь я застрял, потому что C++ код имеет функцию обратного вызова:
Callback(std::function<void(const Result &>)
Результат имеет тип
std::vector<std::pair<float, float>>
Вопросы:
- Как можно сопоставить функцию обратного вызова аргумент std :: function <> в C++/CLI?
Где & как я должен преобразовать C++ в результате структура (вектор пар) для структуры данных .NET (список кортежей) в терминах обратного вызова для доступа к нему в C#?
Можно ли написать лямбда-выражения (с коллекциями .NET), которые будут отображаться в неуправляемой структуре данных (вектор)?
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; }); // do something with iterator it // … cnt++; });
Должен ли я написать обертку для лямбда-выражения?