コンセプト (C++)
コンセプト(英: concept)は、プログラミング言語の機能。かつてC++への採用が検討されていたが、見送られた。ISO/IEC JTC1/SC22/WG21 C++ 標準化委員会によるC++0xの策定において2009年前半まで検討され、規格書のドラフトにも盛り込まれていたが、2009年7月13日の投票で削除されることが決まった。
コンセプトが記載された最後の規格書ドラフトである N2914 の記述に基づいて説明する。
コンセプトは、名前付きの構造であり、型が提供しなければならない機能を指定する。この点は、オブジェクト指向プログラミングで、型の行えることの制限の定義を基底クラスにより行うのに似ている。しかしオブジェクト指向プログラミングとは違い、コンセプトの定義自体にはテンプレートに渡される型が明示的に関連付けられず、テンプレート定義の側で結びつけられる:
テンプレート型引数にclassやtypenameを使い任意の型と指定するのではなく、前方で定義されたコンセプトであるLessThanComparableを使用している。テンプレート関数minに渡された型がコンセプトLessThanComparableを満たさない場合、コンパイルエラーとなり、テンプレート実体化に使われた型がLessThanComparableコンセプトに適合しなかったことが報告される。
より一般的なコンセプトの使用の記法は、以下のようになる:
requiresキーワードの後には、コンセプト宣言のリストが続く。これにより、複数の型を使うコンセプトを使用できる。また、requires !LessThanComparable<T>のように用いることも出来、あるコンセプトに合致する型の使用を禁止することが出来る。これらの機能は、テンプレートの特殊化と同様の方法で使用できる。一般的なテンプレートを少ない機能しか使わないものとして定義し、さらに多機能なコンセプトを用いた特殊化を用意することで、その機能を用いて高いパフォーマンスや高機能性を実現できる。