![]() | Programming Guide | WideStudio/MWT Index 目次 |
特定のインスタンスクラスのポインタを取得するには
特定のクラスのAPIにアクセスする場合、そのクラスのポインタでなければ なりません。従ってなんらかの形で、そのクラス型のポインタを取得してい なければなりません。ここではそのクラス型のポインタの取得の方法を説明 します。WSCbase::cast() メンバ関数によるクラスポインタの取得を説明します。 object が WSCvtoggle クラスのインスタンスであり、トグルの選択状態を 調べる、WSCvtoggle のメンバ関数 setStatus() にアクセスしたい場合の例 です。
- WSCbaseクラスの cast() メンバ関数による取得
クラスポインタ取得API 機能 void* WSCbase::cast(char* className) 指定されたクラス名のポインタを返値します。
C++言語では、通常、派生元へのキャストはできますが、派生元から、派生 クラスへのキャストはサポートされません。WSCbase クラスの cast() 関数 は、その機能を補います。#include <WSCvtoggle.h> //WSCvtoggle クラスを直接アクセスするので。 ... void cbop(WSCbase* object){ //WSCvtoggle クラスの getStatus() 関数に対するアクセス(1) WSCvtoggle* tgl = (WSCvtoggle*)object->cast("WSCvtoggle"); if (tgl == NULL){ //object は、WSCvtoggle クラスのインスタンスではなく、キャストに失敗。 }else{ //object は、WSCvtoggle クラスのインスタンスであり、キャストに成功。 WSCbool status = tgl->getStatus(); } }cast() 関数は、インスタンスが持つ、全ての継承クラスのポインタを取得 することができます。
しかし、継承継承に含まれない型を指定すると NULL が返されます。この機 能をうまく利用すると、次のイベントプロシージャの様にクラスの判別に応 用することが出来ます。#include <WSCvbtn.h> //WSCvbtn クラスに直接アクセスするので。 #include <WSCvtoggle.h> //WSCvtoggle クラスに直接アクセスするので。 ... void cbop(WSCbase* object){ //WSCvbtn クラスを継承しているクラスのインスタンスの判別 WSCvbtn* btn = (WSCvbtn*)object->cast("WSCvbtn"); //WSCvtoggle クラスを継承しているクラスのインスタンスの判別 WSCvtoggle* toggle = (WSCvtoggle*)object->cast("WSCvtoggle"); if (btn == NULL){ //WSCvbtn クラスと全く関係のないクラスのインスタンスである! }else{ //WSCvbtn クラスであるかまたは、WSCvbtn クラスを継承している! } if (toggle == NULL){ //WSCvtoggle クラスと全く関係のないクラスのインスタンスである! }else{ //WSCvtoggle クラスであるかまたは、WSCvtoggle クラスを継承している! } }異なるクラスの複数のインスタンス/クラスにまたがって 利用するイベントプロシージャにおいて、クラスを判別するのに便利です。
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |