最新のC ++コンストラクトを使用するライブラリの2つの例:
- 固有ライブラリとアルマジロライブラリ(線形代数)は、いくつかの最新のC ++構造を使用します。たとえば、両方の式テンプレートを使用して算術式を簡素化し、一部の一時要素を削除できる場合があります。
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf(Armadilloの式テンプレートに関するプレゼンテーション)
- CGALライブラリ(計算ジオメトリ)は、多くの最新のC ++機能を使用します(テンプレートと特殊化を頻繁に使用します)。
http://www.cgal.org
注意:
最新のC ++コンストラクトは非常にエレガントで、非常に楽しく使用できます。これは長所でもあり短所でもあります。それらを使用する場合、テンプレート/特殊化/ラムダの複数のレイヤーを追加することは非常に魅力的であるため、最終的にはプログラムの有効なコードよりも「管理」が多くなります(つまりあなたのプログラムは、解決策を説明するよりも、問題についてより多く「話します」。適切なバランスを見つけることは非常に微妙です。結論:以下を測定して、コードの「信号/ノイズ」比の変化を追跡する必要があります。
- プログラム内のコードの行数は?
- クラス/テンプレートの数は?
- 実行時間 ?
- メモリ消費量
最初の2つを増やすすべてがコストと見なされる可能性があり(プログラムの理解と保守が難しくなるため)、最後の2つを減らすすべてが利益です。
たとえば、抽象化(仮想クラスまたはテンプレート)を導入すると、コードをファクタリングし、プログラムを単純化(ゲイン)できますが、一度だけ派生/インスタンス化されない場合は、関連するゲインがないためコストが発生します(再び)利益はプログラムの将来の進化の後半に来る可能性があるため微妙なため、「黄金律」はありません)。
プログラマーの快適さも、コストとゲインのバランスを考慮する重要な要素です。テンプレートが多すぎると、コンパイル時間が大幅に増加し、エラーメッセージの解析が難しくなります。
こちらもご覧ください
C ++テンプレートを使用した汎用およびメタプログラミングは、計算科学でどの程度有用ですか?