私はライブラリ関数を書いていますが、vectors
&のような引数maps
をそれに渡すことができるようにする必要があります。
ライブラリのヘッダーで宣言された STL パラメーターを持つ関数を使用できないことはわかっています。
std::map<int> FixMap( const std::map<int> & );
ライブラリと実行可能ファイルが同じコンパイラと設定でコンパイルされていない限り、バイナリ互換性の問題のため。
一方、Qt Template Libraryを使用すると、次のように動作します
QMap<int> FixMap( const QMap<int> & );
彼らが提供する DLL は、おそらく私のものとは異なるコンパイラによってコンパイルされたものですが。
この互換性の問題を克服するため に、Qtは、、、、でどのような手法を使用していますか?QMap
QValueList
QString
私は彼らのコードを少し読んだことがありますが、テクニックを分離することはできません.
質問 1:彼らの技術を適用するコードの書き方について、誰かが私に説明してくれますか?
機能することがわかっている唯一の手法は、string
/map
を不透明なポインターとして提供するか、 pImplイディオムを使用することです。
質問 2:この種の呼び出しを実現するために、「ネイティブ」STL ヘッダーの代わりに STLPort を使用できますか? それはSTLのパフォーマンスにどのように影響しますか?