C ++についての私の主な不満の1つは、動的ライブラリ(つまり、dll / so)境界の外側にstdライブラリオブジェクトを渡すことが実際にはどれほど難しいかということです。
stdライブラリは、多くの場合ヘッダーのみです。これは、いくつかの素晴らしい最適化を行うのに最適です。ただし、dllの場合、それらは多くの場合、stdライブラリコンテナの内部構造/コードに影響する可能性のある異なるコンパイラ設定で構築されます。たとえば、MSVCでは、1つのdllがイテレータデバッグをオンにしてビルドされ、別のdllがオフでビルドされます。これらの2つのdllは、stdコンテナーを渡す問題に遭遇する可能性があります。std::string
インターフェイスで公開すると、クライアントが使用しているコードがstd::string
ライブラリのに完全に一致することを保証できませんstd::string
。
これにより、デバッグや頭痛などの問題が発生しやすくなります。組織内のコンパイラ設定を厳密に制御してこれらの問題を防ぐか、これらの問題のない単純なCインターフェイスを使用します。または、クライアントが使用するはずの予想されるコンパイラ設定を指定します(別のライブラリが他のコンパイラ設定を指定する場合、これは問題になります)。
私の質問は、C ++ 11がこれらの問題を解決するために何かを試みたかどうかです。
DLL
sの間は難しいです。SO
sの間は常に正常に機能しました。