サブクラス化用のクラスを作ろうと思ったけど、、、

サブクラス化するためのクラスを作ろうと思って
作ってみたけど、途中で解決できなさそうな
問題に当たったので、結局作らずじまい。

どういう状態になっているのかというと、
まず、コンストラクタを以下のように定義。

CSubClass(HWND hSubClassWnd,bool (*WindowProc)(HWND,UINT,WPARAM,LPARAM));

で、自分が想定している使い方では、
ダイアログボックスを管理しているようなクラスのメンバに
サブクラス化した後に呼び出される関数のメンバを追加する。
そして、その関数をCSubClassの引数に与えて登録完了、っていう
手はずだったけど、これができず。以下のようなエラーが発生。

error C2276: & : 仮想関数のアドレスを取ろうとしました。

というのも、よくよく調べてみると、クラスのメンバ関数の
ポインタを宣言するには、

戻り値 (クラス名::*変数名)(引数)

というように、クラス名を明示してやらないと、無理なようなのです。
こうなってくるとどうしよもなくて、
template使ってできるかなぁ、とも思ったけど、これも多分無理。
抽象クラスを組んで、サブクラス化したときに呼び出される関数を
保持するクラス(上記なら、ダイアログボックスを管理しているクラス)が
それを継承してやれば、ごまかせそうな気もするけど、どうかなぁ。

まぁ、面倒なので、普通にサブクラス化して、そのサブクラス化した関数から
さらにstaticでは無いメンバ関数を呼び出して、その中で
記述を行う、という風にしときました。

さて、明日は補講か。。。

Posted at : 2006-06-03 01:11:02 / Category : none

Comments

まだコメントはありません / No comment.

Send comment


Name


Mail-address (empty is OK. If you want to notify update, please fill mail-address.)


Bot check code (240502 と入力してください / Please input 240502.)