5

最近、Eigen3 をコンパイルし、それを使用して Windows で線形代数のタスクを実行しました。

しかし、Eigen3 が追加の lib または DLL をリンクする必要がないのはなぜでしょうか (そのヘッダーを含める必要があるだけです)。

Eigen はコンパイル時にすべての計算を行いますか? それとも、何かを理解していませんか?

もしそうなら、この種のライブラリのカテゴリ名は何ですか

4

1 に答える 1

10

すべての C++ テンプレート ライブラリと同様に、Eigen はヘッダー ファイルに完全に含まれており、毎回ソース ファイルに挿入されます。そのため、dll にコンパイルされる cpp ファイルは含まれていません。

dll/lib とヘッダーの違いは、クラスがヘッダーで宣言され、cpp ファイルで実装されている場合に発生します。次に、実装部分は常に同じで、dll からロードできます。

ただし、テンプレート ライブラリでは、クラスは渡されたテンプレート パラメーターに依存するため、クラスは完成していません。たとえば、 と書くMatrix<float, 17, 19>と、完全に新しい実装を持つ新しい完全なクラスが作成されますが、これは dll からロードできませんでした。

これにより、多くのテンプレート (さまざまな固定サイズのマトリックスなど) を使用する C++ プログラムも非常に大きくなります。

于 2012-12-04T14:26:25.840 に答える