我必须将复杂数据从C++传递给C函数.在C++中,数据自然存储在一个
std::vector<std::complex> c.C函数期望数据为double的数组,double a[]例如a [0] = Re(c [0]),a [1] = Im(c [0]),a [2] = Re(c [1 ])等
传递此类数据的最佳安全方法是什么?像铸造一样
(double*) (&c[0])
Run Code Online (Sandbox Code Playgroud)
惹麻烦?
很抱歉,如果这是重复的,我只能找到有关将C++复合体传递给C99复合体的相关问题的信息.
Ste*_*non 18
C++ 0x标准花了很长时间来保证这样的转换能够起作用(第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].
和(§23.3.6):
一个向量的元素被存储连续的,这意味着如果
v是一个vector<T, Allocator>其中T一些类型比其它布尔,那么它遵循身份&v[n] == &v[0] + n所有0 <= n < v.size().
普遍的C++ 03标准(虽然是矢量布局)不能保证复杂值的布局,但我会惊讶地发现它没有实现的实现.