gpt4 book ai didi

python - 如何包装 C++ 代码以供 IronPython 访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:07 25 4
gpt4 key购买 nike

我有一个简单的示例,我想从 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 我文件 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"

最佳答案

SWIG-python 不会工作 - 它会生成 CPython 扩展,而 IronPython 不支持这些。

最终,您需要包装 C++,以便可以从 .NET 访问它。我认为您可以使用 SWIG 生成 C# 包装器,然后您可以将其导入 IronPython。否则,您可以使用 C++/CLI 编译器进行编译以直接生成 .NET 程序集,也可以从 IronPython 使用。

关于python - 如何包装 C++ 代码以供 IronPython 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com