2

私はライブラリ関数を書いていますが、vectors&のような引数mapsをそれに渡すことができるようにする必要があります。

ライブラリのヘッダーで宣言された STL パラメーターを持つ関数を使用できないことはわかっています。

std::map<int> FixMap( const std::map<int> & );

ライブラリと実行可能ファイルが同じコンパイラと設定でコンパイルされていない限り、バイナリ互換性の問題のため。

一方、Qt Template Libraryを使用すると、次のように動作します

QMap<int> FixMap( const QMap<int> & );

彼らが提供する DLL は、おそらく私のものとは異なるコンパイラによってコンパイルされたものですが。

この互換性の問題を克服するため に、Qtは、、、、でどのような手法を使用していますか?QMapQValueListQString

私は彼らのコードを少し読んだことがありますが、テクニックを分離することはできません.

質問 1:彼らの技術を適用するコードの書き方について、誰かが私に説明してくれますか?

機能することがわかっている唯一の手法は、string/map不透明なポインターとして提供するか、 pImplイディオムを使用することです。

質問 2:この種の呼び出しを実現するために、「ネイティブ」STL ヘッダーの代わりに STLPort を使用できますか? それはSTLのパフォーマンスにどのように影響しますか?

4

1 に答える 1

0

最初の例は、使用しているコンパイラとは別のコンパイラを使用してライブラリがビルドされた場合でも、2 番目の例と同様に問題ありません。重要なのは、Application Binary Interface (略して ABI) がプログラムとライブラリの両方で同じであることです。

Qt は、ライブラリを構築するときに特別なものを使用しません。

于 2011-11-18T13:53:22.473 に答える