とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

Concept Check Libraryを使おう (1)

The Boost Concept Check Library (BCCL)

なぜコンセプトチェックを使うのか

動機(モチベーション)から。

  • 「自分が書いている関数テンプレートに変な型渡されたらどうしよう…。分かりやすいコンパイルエラーでてくれるかな…」
  • 「関数テンプレートのデバッグしづらい…」
  • 他人のクラステンプレート使おうとしててコンパイルエラーが出た。「はあ?このテンプレート周りのコンパイルエラーさっぱり分からん。自分のコードではこんなコンパイルエラーやっぱ出したくないわー。」
  • Forward Iterator を受け取る関数テンプレートを書いている。ドキュメントにも Forward Iterator を受け取ると書いた。「この関数テンプレート,本当に Forward Iterator を受け取ってコンパイルエラー出さないだろうか…。実は Bidirectional Iterator 要求してるんじゃないか,不安だ。」
  • 「いや待てよ。逆に要求は小さくて Input Iterator で十分なんじゃないか? Input Iterator の方がいろんなとこで使えるし。さて,それをどうやって確認しよう…。」

こんな時,助けてくれるのがコンセプト・チェック・ライブラリ。では使ってみましょう。