重複の可能性:
C++ の複雑な配列を C に渡す
サードパーティの C ライブラリが C99 複素数の配列を引数として期待している場合、私の複素数が STL 複素数型を使用している C++ から呼び出す最も簡単な方法は何ですか? フロートを受け入れて複素数に変換する新しい c 関数でラップすることもできますが、それを行うより直接的な方法はありますか?
重複の可能性:
C++ の複雑な配列を C に渡す
サードパーティの C ライブラリが C99 複素数の配列を引数として期待している場合、私の複素数が STL 複素数型を使用している C++ から呼び出す最も簡単な方法は何ですか? フロートを受け入れて複素数に変換する新しい c 関数でラップすることもできますが、それを行うより直接的な方法はありますか?
C99によると:
6.2.5/13 各複合型には、対応する実数型の正確に 2 つの要素を含む配列型と同じ表現およびアラインメント要件があります。最初の要素は複素数の実部に等しく、2 番目の要素は虚部に等しくなります。
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]
これらをまとめると、2 つの型のレイアウトが同じであることを意味するため、C 関数に の配列へのポインターを渡すだけで済みstd::complex
ます。
古いバージョンの C++ では、このレイアウトが保証されていないことに注意してください。