ネタ元 → カチカチからゆるゆるに
ダックタイピング : アヒル型付け
"If it walks like a duck and quacks like a duck, it must be a duck"
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)
C++におけるtemplateはまさにこのダックタイピングなのね。
#include <iostream>
template<typename Object>
void try_sound(const Object& object) {
object.sound();
}
class Duck {
public:
void sound() const { std::cout << "くゎっくゎっ\n"; }
};
class Bomb {
public:
void sound() const { std::cout << "ちゅどーん\n"; }
};
int main() {
try_sound(Duck());
try_sound(Bomb());
}
DuckとBombはメソッドsound()をメンバに持つ基底クラスから導出されている
わけでもなく、sound()を提供するinterfaceを実装しているわけでもなく、
sound()ってメソッドを持っているだけでtry_soundに食わせられます。
そこがダックタイピングなの。
templateの場合静的なダックタイピングなんですけども。