dynamic_cast

昨日のジェネリックなVisitorに刺激を受けて、MFCのイベント処理を拡張したダイアログの作成に挑戦してみた。とりあえず、やりたい事としては、抽象ダイアログオブジェクトを作成して、そいつにRun-to-completion processingをカプセル化させるということである。これは、Windowsメッセージハンドラをそのまま使うと、引数の処理が面倒なので、できれば引数の値をオブジェクトに包んでイベントハンドラに渡したいという欲望からきている(WPARAMとかLPARAMとかキャストして渡すのがどうも気に入らない)。
で、イベントハンドラの仕組みにジェネリックなVisitorを適用してみて、色々試行錯誤してみた。が、なぜにかdynamic_castでこけてて、具象的なVisitorにキャストできない。原因が不明。うーむ、すっきりしない。


解明。原因は継承のときにスコープの定義が間違ってたことのようだ。
class XXXVisitor : public BaseVisitor, Visitor
という形ではだめなようだ。ちゃんと、
class XXXVisitor : public BaseVisitor, public Visitor
のようにしないといかんのね。
1年C++使ってても、いまだに文法が理解できてないね…。