5

テンプレート クラスのコード ベースに取り組んでいます。ヘッダーのみです (.cpp ファイルはありません)。実装を非表示にして、共有ライブラリと、宣言のみを含むいくつかのヘッダーを提供したいと思います。残念ながら、意味がないように聞こえます。コンパイルされたコードがないため、そのような共有ライブラリには何が含まれますか? コンパイル後にヘッダーから定義を削除しようとすると、未定義の参照が発生します。テンプレートクラスを明示的にインスタンス化せずに、コンパイラにオブジェクトを dll または共有ライブラリに強制的に出荷させる方法はありますか?

4

2 に答える 2

6

いいえ、当面の間、それを行う方法はありません。テンプレート C++ コードを提供する唯一の方法は、ヘッダー ファイルとしてのみです。モジュールはそれを変更するかもしれませんが、ライブラリが完成する前にそれが起こる可能性は低いです.

あなたが試すことができるのは、実装に分割し、可能なすべてのユースケースを明示的にインスタンス化することです。次に、出荷するライブラリは、インスタンス化されたもの以外のタイプでは機能せず、テンプレートがもたらすメリットを大幅に減らします。

于 2012-07-22T17:26:03.643 に答える
3

テンプレートの実装は、コンパイル時に認識される必要があります。そのため、実装を宣言から切り離すことはできません。したがって、テンプレートの利点を利用したい場合は、ヘッダーを渡す方法はありません。

于 2012-07-22T17:33:07.773 に答える