0

私は Linux を使用しており、クロスプラットフォームのコードを書こうとしています。テンプレートを Windows で適切に使用するのが難しいことは知っていますが、詳細は覚えていません。

1 つの問題がテンプレートのデバッグと dll の境界を越えるテンプレートに関係していることは知っていますが、それを回避する方法、または回避策が可能かどうかはわかりません。

他にも問題があると思いますが、あいまいな参照しか見つかりませんでした。

では、Windows での C++ テンプレートの問題は何ですか? テンプレートを使用しないこと以外に、解決策は何ですか?


編集:たぶん、問題はSTL一般的なテンプレートではなく、 のみにあるのでしょうか?

2 つの引用:

Windows でライブラリの境界を越えて STL 呼び出しを公開することはできません。

カプセル化は必須です。私は dll 境界を越えた stl コンテナと Windows 上の静的ライブラリを使用していくつかのプロジェクトを実行しましたが、カプセル化なしでは使用できません。

4

2 に答える 2

2

テンプレートを Windows で適切に使用するのは難しいことを知っています。

私はそのようなことを聞​​いたことがありません。根拠のないFUDのように聞こえますが、完全に無視することをお勧めします。

于 2012-11-11T01:36:42.573 に答える
1

ここに、MS KB からの 1 つの問題があります(編集:これは MSVC 5 および 6 にのみ関係します。そのような古いコンパイラをサポートするつもりはないので、私には関係ありません):

一部の STL クラスには、ネストされたクラスが含まれています。これらのクラスはエクスポートできません。たとえば、deque にはネストされたクラス deque::iterator が含まれています。deque をエクスポートすると、deque::iterator をエクスポートする必要があるという警告が表示されます。deque::iterator をエクスポートすると、deque をエクスポートする必要があるという警告が表示されます。これは、テンプレート クラスがインスタンス化されると、再インスタンス化およびエクスポートできないという設計上の制限が原因です。現在エクスポートできる唯一の STL コンテナーは vector です。他のコンテナー (マップ、セット、キュー、リスト、デキュー) にはすべて、ネストされたクラスが含まれており、エクスポートできません。

于 2012-11-11T02:46:37.670 に答える