...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

C++: ダブルディスパッチ(1)

メモみたいなもの(^^;

C++でダブルディスパッチのうまい実装を考え中.
1つのパラダイムに限定した設計から始めて,もう4パターン作ってしまったがどうも気に入らない.
適当に名前を付けるとこんな感じか?

・インタフェースベース
・ファンクタベース
・テンプレートベース
・コールバックベース

今回の局面に使えるようなダブルディスパッチを説明するサイトが見つからないのが痛い.
とりあえず,ディスパッチに使える言語要素を3つ見つけた.

・仮想関数
・関数オーバーロード
メンバ関数テンプレート

この中の2つを使って,2回ディスパッチしてやればいい.
さらに,

・動的なディスパッチは仮想関数と関数オーバーロードの組み合わせ
・静的なディスパッチしかできないがメンバ関数テンプレートは高速

ここまで踏まえられたらおいしいが難しいなあ.