从C ++提供C99复杂参数

时间:2013-01-28 19:31:37

标签: c++ c c99

  

可能重复:
  Passing a C++ complex array to C

如果第三方C库需要一个C99复数数组作为参数,那么从C ++中调用它的最简单方法是什么?我的复数使用STL复数类型?我可以将它包装在一个新的c函数中,它接受浮点数并将它们转换为复数,但是有更直接的方法吗?

1 个答案:

答案 0 :(得分:4)

根据C99:

  

6.2.5 / 13每种复杂类型与数组具有相同的表示和对齐要求   类型恰好包含相应实数类型的两个元素;第一个要素是   等于复数的实部和虚部的第二个元素   号。

并且根据C ++ 11:

  

26.4如果acv* 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 ++并不能保证这种布局。