オブジェクト指向プログラミング(OOP)のバックグラウンドを持ち、モダンC++設計を深く掘り下げたいと考えているなら、まず Lokiライブラリ。
Lokiは、Andrei Alexandrescuによって作成され、彼の著書『Modern C++ Design』とともに開発されたC++ソフトウェアライブラリです。
C++コミュニティは、デザインパターンを実装するための堅牢なフレームワークを提供するライブラリから恩恵を受けることができます。Lokiはそのような役割に対する強力な候補として際立っています。したがって、Lokiをモダナイズし、できるだけ多くの広く使われているデザインパターンを組み込むことは、C++開発者にとって大きな利益となるでしょう。
このライブラリは、C++テンプレートメタプログラミングを広範に活用して、タイプリスト、ファンクタ、シングルトン、スマートポインタ、オブジェクトファクトリ、ビジター、マルチメソッドなど、広く使われているいくつかの構造を実装しています。
著者が説明する、このライブラリの設計の背後にある動機は次のとおりです。
- Lokiでは、各コンポーネントが他のコンポーネントから独立して機能し、ユーザーは必要な機能だけを選択的に使用できます。
- 「小は美なり」の原則を受け入れ、Lokiは内部の依存関係を最小限に抑えています。
- このライブラリは「乗法的な卓越性」を優先し、簡潔で抽象的な動作モジュール(ポリシー)の組み合わせを通じて、微妙で特殊化された設計を実現することに焦点を当てています。
- Lokiは戦術的なアプローチよりも戦略的なアプローチを重視し、低レベルの詳細よりも設計およびアーキテクチャのコンポーネントを優先しています。
- Lokiはモノリシックな設計ではなくデザインパターンのコレクションであるため、動作環境に関する前提を最小限に抑え、デフォルトの決定を統合するための明確に定義された拡張ポイントを通じて柔軟性を提供します。
- Lokiはモダンなコンパイラ向けに調整されており、能力の低いコンパイラに妥協することなく、C++の標準内でコードの明確さを追求しています。
- そのコンポーネントは、コンパクトで、理解しやすく実装しやすく、個別にも組み合わせても効果的であり、実際のプロジェクトで非常に有用であるように設計されています。
Lokiには、次のような貴重なデザインパターンがいくつか組み込まれています。
- Factory(ファクトリ)
- Abstract Factory(抽象ファクトリ)
- Visitor(ビジター)
- Singleton(シングルトン)
また、いくつかの有用なイディオムも使用しています。
- ポリシーベース設計
- マルチプルディスパッチャー
- Pimpl
- Printf(型安全なprintfの代替)
- 順序付き静的オブジェクト生成
- スコープガードポインタ
- スモールオブジェクトアロケーター
- スマートポインタ
- コンパイル時チェック
言及されたイディオムの詳細な説明は、この洞察に富んだ リソース。
CoderGearsは、この注目すべきライブラリを更新するための コンテスト を開始しました。主な目的は、最近のC++標準で導入された機能を最大限に活用しながら、よく作られたライブラリを通じてデザインパターンについて学ぶことです。
そのモダナイゼーションに取り組みたい開発者にとって、最初に対処すべき問いは次のとおりです。 このリファクタリングプロセスの最初のステップは何でしょうか?
Lokiは新しいC++標準が導入される前に作成されました。つまり、著者が当初設計・開発したクラスの一部には、これらの最近の標準に同等のものが存在します。これには次のものが含まれます。
- SmartPointer
- Tuple
- NullType
- Typelist
- static_check
したがって、最初のステップは、これらのクラスを削除し、ソースコードの残りの部分での使用を置き換えることです。
近い将来、開発者がこのライブラリをモダナイズするのを支援するために、この素晴らしいライブラリに関する一連の記事を公開する予定です。
