http://d.hatena.ne.jp/haru-s/20070614/1181841613 の続きというか関連.
C++ で多態(polymorphism)を実現する方法はたくさんある。
昔は継承で実現するのが一般的だったが、最近は
きまぐれ日記: C++ で多態
委譲が推奨されている。そこで、以下のコードを書いてみた。
おそらくその筋の人からみれば当たり前だと思うけど。
何の変哲もないコードをD言語で書いてみた.
import std.stdio; class Dog { void bark() { writefln("wan!wan!"); } } class Cat { void bark() { writefln("nyan!nyan!"); } } interface IAnimal { void bark(); } class Animal(T) : IAnimal { private T animal; this() { animal = new T; } void bark() { animal.bark(); } } void bark(AnimalT)(AnimalT animal) { animal.bark(); } void main() { // 普通に呼び出し auto dog = new Animal!(Dog); auto cat = new Animal!(Cat); dog.bark(); cat.bark(); // polymorphism っぽい振る舞い IAnimal animal = dog; animal.bark(); // interface 経由で呼び出し animal = cat; // 付け替え animal.bark(); // interface 経由で呼び出し // duck typing っぽい振る舞い bark(dog); bark(cat); }
こういうやり方があることは知っていたけど,実際に自分で書いてみるのは初めて.
なんか面白いな,これ.
もっと使っていくべきか.
追記
ちょくちょく書き直してます(^^;
duck typing っぽい振る舞いとか.