提问人:Woodenplank 提问时间:11/6/2023 更新时间:11/6/2023 访问量:63
将 C++ 类与 Python 连接;将非标准类型传递给外部 C
Interfacing C++ Classes with Python; passing non-standard types to extern C
问:
违背我自己的最大利益,我开始以“边做边学”的方法学习 C++。
我正在尝试创建一个要在 Python 中导入的 C++ 库 - 具体来说,我已经在 C++ 中实现了一个 Matrix 类来构建面向对象的经验,其想法是利用 C++ 速度进行潜在的繁重数字处理,例如矩阵乘法,但其他方面能够使用 Python 的轻量级语法和丰富的包库。
我在这里遵循一个(看似)出色的教程,但是该示例中实现的类和进程仅接受并返回整数,而“extern ”C“ wrapping' 函数也接受并返回整数。 (他们的 Cpp 标头函数)
class myProcessor {
protected:
int exp;
int size;
public:
myProcessor(int exp_in, int size_in);
int process(double *d, int size);
};
extern "C" {
unsigned int myProcessorInit(int exp_in, int size_in);
int myProcessorProcess(unsigned int id, double *d, int size);
} //end extern "C"
对于我的矩阵类,我有成员函数,它们既接受又返回矩阵类对象(例如,矩阵加法将两个矩阵对象加在一起并返回一个新对象),并且类构造函数接受一个向量(并使用 std::vector 逐行存储实际值)。
所以我的问题是,在我进一步讨论这个问题之前,是否可以将向量和对象分类为 Python -> extern “C” -> C++?如果可能的话,它是否可行?喜欢;在肉伤的规模上,“炸掉我的整条腿”,我用这种实现向自己的脚开枪有多糟糕?
我知道vector::d ata可以生成到向量存储其值的实际数组,可以在这里使用吗? 我还制作了一个矩阵设置版本,其中我将输入转换为一维数组;这会更容易移植/连接吗?
p.s. 我知道 Numpy 基本上已经这样做了,但重点是尝试学习如何自己做事。
答: 暂无答案
评论
std::string
extern C
vector::data
可用于将数据移动到 C++ 之外,只要数组的内容是基元的,保证 的生存期超过指针返回的使用,并且没有任何内容(如由 触发的大小调整)会使所指向的数组无效。vector
data
push_back