我有一个简单的例子,我想从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"
答案 0 :(得分:2)
SWIG-python无法正常工作 - 它会生成CPython扩展,而IronPython也不支持这些扩展。
最终,您需要包装C ++,以便可以从.NET访问它。我认为您可以使用SWIG生成C#包装器,然后可以将其导入IronPython。否则,您可以使用C ++ / CLI编译器直接生成.NET程序集,也可以从IronPython中使用。