テンプレートメタプログラミングなどのコンパイル時の手法を使用して実装されたデザインパターンを使用するライブラリを知っている人はいますか?Lokiがいくつか実装していることは知っていますが、他のライブラリを見つける必要があります。
5 に答える
Boost.Spiritはかなり大きなものです。
興味のあるデザインパターンによって異なります。「ActiveObject」やDisposeのように、コンパイル時に実装するのが難しいものもあります。
「インタープリター」パターン->boost.ublasとblitz++はどちらも「式テンプレート」を使用します
「ブリッジ」パターン->すべての標準コンテナは「アロケータ」引数を取ります(Lokiのほとんどはブリッジパターンでもあります)
「戦略」パターン->STLテンプレート関数は、引数のタイプに基づいて最適な実装を選択します
これらすべての唯一の違いは、パターンの評価が実行可能ファイルの実行時ではなく、コンパイラの実行時に行われることです。したがって、必要なのは少し考えを調整することだけです。テンプレートはプログラムであり、「C++コンパイラ」がこのプログラムを実行して解釈します。このテンプレートプログラムの出力は、リンクの準備ができているオブジェクトファイルです。つまり、コンパイラが実行されているとき、テンプレートコードの実行時間は正確です。C ++テンプレートは、lispやXSLTと同じように、チューリング完全な関数型言語です。
実際、1993年の最初のテンプレートメタプログラムの出力には、実行可能ファイルではなく、fibonaciiシーケンスなどを出力する一連のコンパイラエラーがありました。
式テンプレートを使用するいくつかのライブラリ:ublas、blitz、マトリックステンプレートライブラリ、ftensor、またはGoogleC++テンプレートマトリックス。
ちなみに、ftensorは本当に滑らかですhttp://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf。
デザインパターンを使ったライブラリよりも、デザインパターンを使うのに役立つライブラリを求めているのではないでしょうか。
ブーストにはいくつかありますが、Flyweightのように多すぎません-大量の冗長性の高いオブジェクトを管理するためのデザインパターン。
まだリリースされていないが受け入れられたライブラリBoost.Factoryと拒否されたライブラリBoost.Singleton
Boost.Pimpl(レビュースケジュール上)、Scope Exit(承認済み)、MemoizerとしてC++イディオムを実装するライブラリもいくつかあります。
Doen almal GPG hier?
Lokiに実装されている場合:-ファクトリアブストラクト-ファクトリ-シングルトン-ビジター-コマンド
ブーストフライ級で
STLにはイテレーターとアダプターがありますが、コンパイル時であるためにカウントされないと確信していますか?
元の仕様はややあいまいです。
ジェネリックプログラミング(テンプレートベースの実装)を他のコンパイル時の手法と混同しないように注意してください。
上記の質問が何を意味するのか、誰かが手がかりを持っていますか?