2009-02-24 16 views
7

私はテンプレート付きのクラスを見て、それを書いた人がテンプレートを使用した理由を考えるのは難しいです。なぜブーストはひどくテンプレート化されていますか?

たとえば、mutexクラス。すべてのミューテックスのコンセプトはテンプレートとして実装され、そのコンセプトに一致するインタフェースを持つ基本クラスや抽象クラスを単純に作成することができます。

編集後の回答:私は仮想関数のコストについて考えましたが、時には理解を深めるためにパフォーマンスペナルティを払う価値はありませんか?私は時には(特にブーストで)、テンプレートを誤解した結果、テンプレート化されたコードを理解し、コンパイルエラーを解読することが本当に難しいことを意味します。

+0

この人には良い質問です:http://stackoverflow.com/users/5597/anthony-williams(boost.threadの著者):p –

+0

C++コミュニティの主な哲学は、あなたは "尋ねる。 Boostプロジェクトは、STLと同様に、テンプレートを使用してすべてのライブラリを設計することによって、その理念に従うよう努めています。あなたが言及したように、しかし、コストがあります:時には苦しむ理解。あなたがより簡単に理解できるライブラリが必要な場合は、Qtライブラリを見てください。 Boostがやっていることの多くが含まれています。私の意見では、Qtの設計は大規模なC++開発を可能にしますが、Boostは完全に欠けています。 –

答えて

20

テンプレートは、仮想関数を必要とせずに、コンパイル時に高度に最適化することができます。テンプレートトリックの多くは、コンパイル時の多型と考えることができます。コンパイル時にどのような動作が必要なのか分かっているので、クラスを使用するたびに仮想関数呼び出しを支払う必要があります。ボーナスとして、テンプレート化されたコードの多くは、最も基本的な関数呼び出しオーバーヘッドをなくすために簡単にインライン化することができます。

さらに、C++のテンプレートは、非常に強力で柔軟性があります。これらのテンプレートは、それ自体が完全な言語です。ランタイムポリモーフィズムではるかに多くの作業を必要とするテンプレートでは、簡単にできることがいくつかあります。

3

テンプレートを使用すると、アルゴリズムの汎用バージョンを実行できます。コンテナの汎用バージョン。もはや型について心配する必要がなくなり、型に結びつける必要がなくなります。 Boostは、日々の生活の中でC++を使用してさまざまな人々のニーズに対応しようとするライブラリのコレクションです。

関連する問題