gpt4 book ai didi

c++ - 混合使用 C(99) 和 C++ 的复数类型

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

我正在编写一个数学库,它的核心是 C++。稍后它可能会在纯 C 中实现(我想是 C99)。我想我需要一个类似 C 的 API,这样我就可以得到 Python 和 matlab 之类的东西来使用这个库。我的印象是用 C++ 做这件事很痛苦。

那么在 double complex *some_array_in_C99 之间是否有好的或标准或正确的方式进行转换? , 和 complex<double> *some_array_in_cpp

我可以使用 void *指针,但我不确定这是否好。

这可能有点挑剔,因为 ctypes 似乎可以与 complex<double> 一起正常工作,但我担心 matlab 和其他可能的数值环境。

最佳答案

C99 和 C++0x 标准都规定它们各自的 double 复数类型必须具有与两个 double 组相同的对齐和布局。这意味着您可以将参数作为 void * 传递并让您的例程(相对)容易地从任何一种语言调用,这是许 multimap 书馆采用的方法。

C++0x 标准保证(§26.4)reinterpret_caststd::complex<double>*double*会做正确的事;如果我没记错的话,这在标准的早期版本中并没有明确规定。如果您愿意以 C++0x 为目标,您可以使用它来为您的界面做一些更清洁的事情。

鉴于实际布局和对齐规范的定义是一致的,我很想只根据语言在头文件中设置类型;您的实现可以使用任何一种语言,并且数据将以任何一种方式在内存中正确布局。我不确定 MATLAB 是如何在内部做事的,所以我不知道这是否与 MATLAB 兼容;如果他们使用标准的 LAPACK 方法,那么它将在许多但不是所有平台上的所有情况下都适用; LAPACK 定义了自己的 double complex输入 struct有两个double成员,它们通常在内存中以相同的方式布局(这不能保证),但在某些平台上可能遵循不同的调用约定。

关于c++ - 混合使用 C(99) 和 C++ 的复数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332726/

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