汎用プログラミングでは、抽象化には正確な意味があり、「概念」と呼ばれます。概念は次のように定義されます。
概念は、有効な式、関連付けられた型、不変条件、および複雑さの保証で構成される一連の要件です。要件を満たす型は、概念をモデル化すると言われています。概念は、洗練と呼ばれる別の概念の要件を拡張できます。
- 有効な式は、式に含まれるオブジェクトが概念のモデルと見なされるために正常にコンパイルする必要がある C++ 式です。
- 関連付けられたタイプは、1 つ以上の有効な式に参加するという点でモデリング タイプに関連するタイプです。通常、関連付けられた型には、モデリング型のクラス定義内にネストされた typedef を介してアクセスするか、traits クラスを介してアクセスできます。
- 不変条件は、常に真でなければならないオブジェクトの実行時の特性です。つまり、オブジェクトに関係する関数は、これらの特性を維持する必要があります。不変条件は、多くの場合、事前条件と事後条件の形を取ります。
- 複雑さの保証は、有効な式の 1 つの実行にかかる時間、またはその計算で使用されるさまざまなリソースの量に関する最大制限です。C++ 標準ライブラリで使用される概念は、SGI STL サイトで文書化されています。
概念を実際のコードに実装するには、いくつかの方法があります。古典的な OOP アプローチは、有効な式と関連する型を提供する抽象基本クラスを作成することです。具体的な派生クラスは、不変条件と複雑さの保証を提供します。テンプレートの場合、有効な式はより暗黙的であり、インスタンス化後にのみチェックされます。概念を実装するテンプレートは、ダック タイピングの形式です。アヒルのように見える場合は、アヒルのように鳴きます....
C++0x の開発プロセスでは、概念をコードで直接表現できるようにするために多大な努力が払われましたが、C++11 標準には組み込まれませんでした。ただし、Concepts Liteバージョンは、次の C++14 標準に登場する可能性があります。