traits と tag dispatching

C++ のソースを読んでいると、よく traits と tag dispatching のテクニックを見ます。詳しい説明は個々の記事に委ねるとして(下記リンク先を資料に勉強中…)、ざっくりと今のところ掴んでいる感じを書いてみます。

どちらのテクニックも、コンパイル時に呼び出す関数を決定してしまいたいという欲求が少なくともあり、それを実現するためのテクニックのようです。まさに C++ という文化を反映したようなテクニックです。

tag dispatching はそれに加えて、任意の型に対するオーバーロード関数を用意するのが困難であるというところから、このテクニックが使われているようです。このテクニックを用いると、ある型の集合に対してはこの関数、他のある型集合に対してはあの関数を呼び出す、というようなことを実現することができます。特定の型に対してオーバーロードを用意することは簡単ですが、その型が複数あるとオーバーロードが書ききれなくなることは明らかです。tag dispatching はこの問題を打開します。

参考資料

カテゴリーC++

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください