多重定義
C++の様に多重定義とテンプレートを使用可能な言語では、両方の機能を組み合わせることにより静的な多態を実現することができる。また、PostgreSQLのストアドプロシージャーの様なテンプレートを備えていない言語でも同様の多態を実現できる場合がある。
以下に例を示す。
この例ではSign関数内部の演算子とabs関数がSign関数の引数に指定した値によって変化する。なお上記関数テンプレートは複素数型 std::complex に対して適用することもできる。その場合、結果は正規化された複素数(正規化ベクトル)となり、符号関数の複素数への拡張に一致する。
この様にテンプレートと多重定義を備える言語では、多重定義でオーバーライドを代用することができる。
多重定義による多態は、コンパイル時にしか実現できないという問題があるものの単純なオーバーライドでは実現しづらい各種柔軟性を備えている。
まず、メンバー関数だけでなく大域スコープの関数をクラスのインターフェースの一部として見做す事が出来るようになる。これにより、単に手続き型の要素でしか無かった大域スコープの関数をオブジェクト指向機能の一要素として組み入れる事が出来る。そして、大域スコープの関数がインターフェースとして機能し始める事によりクラスだけでなく、intやdouble型といったメンバー関数を持てない型にもオブジェクト指向の恩恵が得られる様になるのである。