私はこれに対する答えを知っていると確信していますが(いいえと思います)std::function
、APIで(モジュールの境界を越えて)値で安全に受け入れ/返すことができますか?
std::function
あるベンダーの実装が他のベンダーの実装と互換性があるという保証はないと思うので、私は「いいえ」と考えています。そうですか?
私が思うに答えがノーなら、あなたはこの種のことをどのように扱いますか?私は自分自身を実装することに頼らなければならないかもしれませんし、あるいはすべて一緒のようなことを避ける必要があるかもしれませんstd::function
(例:関数ポインターまたは関数型を操作する)。:-(私は以前に多くの場合それを行っていることに気づきました(多くの標準C ++ライブラリを再発明し、残念ながら、範囲ctorと塗りつぶしctorの両方をサポートする独自のSTL準拠のベクトル型、カスタムアロケータなどを作成しました。確かに面白くなかったし、標準の実装と同じくらい良かったとは思えない)たとえば、MSVC2010のstd::functionの実装がmingwで記述されたバイナリからあるライブラリに動的にリンクする可能性があるためです。
もちろん、別の方法は、APIでこれらの種類のC ++機能をまったく使用せず、たとえばCインターフェイスを使用することですが、APIを中央のAPIとして使用するため、かなりのコストがかかります。内部開発とサードパーティ開発の両方。