将C ++复杂数组传递给C语言
我必须将复杂数据传递给C ++中的C函数。 在C ++中,数据自然存储在std::vector c
。 C函数期望数据为double, double a[]
的数组,使得a [0] = Re(c [0]),a [1] = Im(c [0]),a [2] = Re (c [1])等
传递此类数据的最佳安全方法是什么? 像铸造一样
(double*) (&c[0])
惹麻烦?
很抱歉,如果这是重复的,我只能找到有关将C ++复合体传递给C99复合体的相关问题的信息。
C ++ 0x标准花了很长时间来保证这样的转换能够起作用(第26.4节):
此外,如果a是
cv std::complex
类型的表达式,并且表达式* a[i]
为整数表达式i
定义良好,则:–
reinterpret_cast
应指定(a)[2*i] a[i]
的实部,并且–
reinterpret_cast
应指定(a)[2*i + 1] a[i]
的虚部。
和(§23.3.6):
向量的元素是连续存储的,这意味着如果
v
是vector
,其中T
是除bool之外的某种类型,则它遵循所有0 <= n < v.size()
的标识&v[n] == &v[0] + n
0 <= n < v.size()
。
普遍的C ++ 03标准(尽管矢量布局是)保证了复数值的布局,但是我会惊讶地发现它没有实现的实现。