7

私はこれに対する答えを知っていると確信していますが(いいえと思います)std::function、APIで(モジュールの境界を越えて)値で安全に受け入れ/返すことができますか?

std::functionあるベンダーの実装が他のベンダーの実装と互換性があるという保証はないと思うので、私は「いいえ」と考えています。そうですか?

私が思うに答えがノーなら、あなたはこの種のことをどのように扱いますか?私は自分自身を実装することに頼らなければならないかもしれませんし、あるいはすべて一緒のようなことを避ける必要があるかもしれませんstd::function(例:関数ポインターまたは関数型を操作する)。:-(私は以前に多くの場合それを行っていることに気づきました(多くの標準C ++ライブラリを再発明し、残念ながら、範囲ctorと塗りつぶしctorの両方をサポートする独自のSTL準拠のベクトル型、カスタムアロケータなどを作成しました。確かに面白くなかったし、標準の実装と同じくらい良かったとは思えない)たとえば、MSVC2010のstd::functionの実装がmingwで記述されたバイナリからあるライブラリに動的にリンクする可能性があるためです。

もちろん、別の方法は、APIでこれらの種類のC ++機能をまったく使用せず、たとえばCインターフェイスを使用することですが、APIを中央のAPIとして使用するため、かなりのコストがかかります。内部開発とサードパーティ開発の両方。

4

1 に答える 1

9

全員が同じルールでプレイし、標準ライブラリが動的にリンクされている限り、それを行うことができます。サードパーティが特定のコンパイラとそのコンパイラの特定のバージョンを特定のビルドフラグとともに使用する必要があることを知っている場合、問題はありません。

独自のラッパーを作成する場合でも、そのラッパーの特定のバージョンを使用する必要がありますが、それを適用する方が少し簡単です。

しかし実際には、それはDLLを介して相互運用しようとするために支払う代償です。全員が同じページにいる必要があります。そうしないと機能しません。または、基本的なタイプまたは自家製の制御されたインターフェイスに固執する必要があります。

于 2012-02-26T21:04:11.143 に答える