ポリモーフィズム

やはりJavaの人達は独自の世界観があって面白いなーと思うのでした。
http://d.hatena.ne.jp/JavaBlack/20071116/p1
ポリモーフィズムとか何か横文字がかっこよすぎるんで以下では多態性という言葉を使います。
さてそれはどうでもよくって、静的型言語における「継承と表裏一体」ではない多態性の例があがってないぽいので適当に。
勿論ボクはC++ラヴァーなのでC++で書きます。OCamlのほうがどう考えても例としてはいいと思いますが、愛が足りませんでした。

template <typename Base> class Hello : public Base{
public:
  void f(){
    cout << "hello, ";
    Base::f();
    cout << endl;
  }
};
class World{
public:
  void f(){
    cout << "world";
  }
};
int main{
  Hello<World> hw;
  hw.f();
  return 0;
}

まあ実行したらはろーわーるどとか多分でます。
継承使ってるじゃん、と思うかもしれませんが、HelloとWorldには何の関係も無いことが重要です。結局のところ、派生クラスから呼び出せるメンバ関数fさえ定義しているクラスなら、Baseはなんだろうとかまわないわけです。すごーい。
とまあこういったものを静的な多態性と言ったりするんだと思います。ほんまかいな。不安になって静的な多態性でぐぐったら2件しかヒットしませんでしたから、まあそういうことです。
あと typename Base とかしてますが、多分これは正しくなくって、あれなんとかかんとかさんという偉い人いわく、Baseという名前よりPolicyという名前を使ったほうがいいらしいですよ。ぶっちゃけC++とか書かないから良く知りません(C++ラヴァーじゃ なかったのか!)
よくわからない人はModernなんちゃらっていう本を読むといいと思います。多分もっと混乱します。


多態性みたいな一般的な性質が何らかの言語機能とくっついてるわけ無いじゃん、とまあそれだけの話でした。
追記:よく見るとid:JavaBlackさんのところ「あわせてよみたい」に入ってますね。うちみたいなクソみたいな場所あわせて読まないほうがいいと思うんだけれど…