W.I.S. Laboratory
menu-bar

C++


C++でダックタイピングしてみる

C++のジェネリクスはとても強力で、「どんな型でも何でも来い」という関数を作ることができる。
これこそが関数テンプレートだ。
これを使えば、動的型付け言語(たしかRuby)で生まれた手法「ダックタイピング」をC++で実現することができる。
Swiftでもこれと似たジェネリックな関数を作ることができるが、受け取ったインスタンス内のメソッド呼び出しまでは対応していないようだ。
Goも1.18からジェネリクスに対応し、同じようにジェネリックな関数が作れるようになったが、受け取った構造体に紐づいた関数呼び出しまではできなかった。(ただしGoは別の方法でダックタイピングができる)
ということで、これができるのはC++の強みだと思う。
静的型付け言語でダックタイピングをすることを「静的ポリモーフィズム」と呼ぶ。
どういうことかというと、実際はそれぞれの型に対応した関数(マシンコード)がその型の数だけ生成される・・つまり、コンパイル時に関数をオーバーロードして量産しておこう、ということみたいだ。


[ 戻る ]
saluteweb