Как вы оберните код C ++ для доступа к IronPython

У меня есть простой пример, к которому я хочу получить доступ из Ironpython (я из «обычного / нормального» python »), поэтому я изо всех сил пытаюсь импортировать свой код C ++ в Ironpython. Обычно я просто использую SWIG, оборачиваю свой код, импортирую и продолжаю свой веселый путь

Но с Ironpython на C #, а не на C, это делает этот процесс намного сложнее

Как мне обернуть этот класс для Ironpython
(Я также приложил файл swig для этого примера, но это может быть бесполезно)

#include "minimal.h"

double average(std::vector<int> v) {
return std::accumulate(v.begin(), v.end(), 0.0) / v.size();
}

std::vector<double> half(const std::vector<double>& v) {
std::vector<double> w(v);
for (unsigned int i = 0; i<w.size(); i++)
w[i] /= 2.0;
return w;
}

void halve_in_place(std::vector<double>& v) {
std::transform(v.begin(), v.end(), v.begin(),
std::bind2nd(std::divides<double>(), 2.0));
}

с заголовочным файлом

#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>

double average(std::vector<int> v);

std::vector<double> half(const std::vector<double>& v);

void halve_in_place(std::vector<double>& v);

У меня был файл swig i minimal.i, но я понимаю, что существует множество проблем с выпуском swig.exe -c ++ -python «% (FullPath)» для этого и наличием Ironpython фактически принимающим его при импорте.

%module transfervector
%{
#include "minimal.h"%}

%include "std_vector.i"// Instantiate templates used by example
namespace std {
%template(IntVector) vector<int>;
%template(DoubleVector) vector<double>;
}

// Include the header file with above prototypes
%include "minimal.h"

5

Решение

SWIG-python не будет работать — он генерирует расширения CPython, а IronPython их не поддерживает.

В конечном итоге вам нужно обернуть C ++, чтобы он был доступен из .NET. Я думаю, что вы можете использовать SWIG для генерации оболочек C #, которые затем можно импортировать в IronPython. В противном случае вы можете скомпилировать с помощью компилятора C ++ / CLI для непосредственного создания сборки .NET, которую также можно использовать из IronPython.

2

Другие решения