2009-08-10 8 views
22

C++ 0xについてのこの新しい(on /。)はもう概念を持たないと聞いたことがありますが、私はそれらが何であるか分かりません。誰かが私に説明することはできますか?ここで概念とは何ですか?

答えて

25

概念テンプレートコードを書く誰かが型パラメータを満たすために必要な要件を指定することができ、一般的なプログラミング機能です。

たとえば、一部のコレクションタイプでは、コレクションのtypeパラメータに<演算子を定義する必要があります。したがって、プログラマはLessThanComparableというコンセプトを定義することができます。コンセプトを定義すると、テンプレート化されたクラスの型パラメータに演算子<が定義されている必要があります。テンプレートユーザがLessThanComparableコンセプトを持たないタイプ(すなわちオペレータ<を持たないタイプ)を使用してテンプレートをインスタンス化しようとすると、コンパイラはテンプレートコードに関連するエラーメッセージの激流ではなく単純なエラーメッセージを出すことができます。コンパイラは、より効率的なコードを生成するために概念によって提供される追加の情報を利用することもできます。

これはあまり単純すぎますが、概念の背後にある一般的な考え方を示していると思います。

概念の機能のいくつかを試したい場合は、Boost.Conceptチェックライブラリをご覧ください。私はそれが標準になるだろう能力のフルレンジを提供するとは思わないが、それは始めるのが良い場所だ。

ConceptC++をご覧になることもできますが、ここには概念の定義があります。

+0

これは、EBGreenのリンクとほぼ同じです。奇妙な偶然の一致? – jkeys

+2

本当にありません。私はその記事がほぼ1年前に最初に出版されたときにその記事を読んだ。私は情報を保持する能力を持っています:-) – Ferruccio

+0

素晴らしい答え。これはC++に関する質問の1つでした。私は恐れていました。 – chester89

関連する問題