わかったかも、C++とSTL

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