22

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

4

1 に答える 1

24

コンセプトはジェネリックプログラミング機能であり、テンプレートコードを作成する人が、型パラメーターが満たす必要のある要件を指定できるようにします。

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

これは過度に単純化されたものですが、概念の背後にある一般的な考え方を示していると思います。

コンセプトの機能のいくつかを試してみたい場合は、Boost.ConceptCheckライブラリをご覧ください。標準に含まれる予定だったすべての機能を提供しているとは思いませんが、開始するのに適した場所です。

また、 ConceptC ++も確認することをお勧めします。そこには、概念の適切な定義があります。

于 2009-08-10T02:03:20.287 に答える