わかったかも、C++とSTL
- 昨日の記事でSTLの教科書の第2章をめくってみて、こういうことだとわかった
- C++はオブジェクト指向言語(そんなことは、昔から知ってましたが、言葉として覚えていただけでした)
- オブジェクト指向なので、クラスを作って、それのインスタンスを発生させて(そのクラスのオブジェクトを作ること)、処理するには、そのインスタンスのメンバー関数を呼び出す
- これがクラス中心主義、ということ
- そうすると、オブジェクト指向でない言語でやっていた「諸処理」がうまく使えないので
- 関数オブジェクトという、「オペレータ・関数を登録して、クラスのメンバー関数と同じ枠組みで使えるようにするための、オペレータ・関数のためだけのクラス」というのを作ることにした
- また、きちんと処理するために必須である型制約はもちろんあるけれど、それをしながら、型に依らない処理を「型横断的」に定義して使いやすくしたい
- そのためにテンプレートという概念を入れて、いろんな型に対応させることを前提に作りますよ、実際のインスタンスは型指定してくださいね、ということでコンテナを作った
- 反復子(イテレータ)はコンテナ要素にアクセスする仕組みだけれど、2つの利点がある
- 1つはコンテナの仕組み(添え字アクセスできるかできないかなど)によらずに、アクセス方法を統一できる
- もう1つは、ポインタを使って実現するので、(うまく使えば)速い
- これを可能にしてくれているのがSTL、と、こういうことらしい
- ここに表れていないC++を理解するために必要な考え方は「クラスの継承」だけ(と言ってもよい)
- HaskellとC++とSTL