如果第三方C库需要一个C99复数数组作为参数,那么从C ++中调用它的最简单方法是什么?我的复数使用STL复数类型?我可以将它包装在一个新的c函数中,它接受浮点数并将它们转换为复数,但是有更直接的方法吗?
答案 0 :(得分:4)
根据C99:
6.2.5 / 13每种复杂类型与数组具有相同的表示和对齐要求 类型恰好包含相应实数类型的两个元素;第一个要素是 等于复数的实部和虚部的第二个元素 号。
并且根据C ++ 11:
26.4如果
a
是cv* std::complex<T>*
类型的表达式且表达式a[i]
适用于整数表达式i
,那么:
reinterpret_cast<cv T*>(a)[2*i]
应指定a[i]
和reinterpret_cast<cv T*>(a)[2*i + 1]
应指定a[i]
这些意味着这两种类型具有相同的布局,因此您可以简单地将C函数传递给std::complex
数组的指针。
请注意,旧版本的C ++并不能保证这种布局。