strictByteStringsを Haskell から C++に変換して、FFIstd::string経由で C++ ライブラリに渡したいと考えています。には文字が含まれている可能性があるため、中間ステップとしてに変換することは実行できません。ここで正しいアプローチは何ですか?ByteStringNULLCString
現在のソリューション
これまでの回答に感謝します。そのタスクの標準的な解決策を望んでいましたが、まだ存在しない可能性があります:)
一部のC++ ライブラリ ドキュメントには、次のように記載されています。
文字列 ( const char * s, size_t n );
コンテンツは、s が指す文字配列の最初の n 文字で形成された文字列のコピーに初期化されます。
したがって、ByteString から一度コピーして std::string を構築するような関数を書くことができます。
foreign import ccall unsafe toCCString_ :: CString -> CUInt -> IO (Ptr CCString)
toCCString :: ByteString -> IO (Ptr CCString)
toCCString bs =
unsafeUseAsCStringLen bs $ \(cstring,len) ->
toCCString_ cstring (fromIntegral len)
それに付随する C++ コードはtoCCString_、Neil と Alan が指摘したように見えます。