WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT Index
目次


特定のインスタンスクラスのポインタを取得するには

特定のクラスのAPIにアクセスする場合、そのクラスのポインタでなければ なりません。従ってなんらかの形で、そのクラス型のポインタを取得してい なければなりません。ここではそのクラス型のポインタの取得の方法を説明 します。 WSCbase::cast() メンバ関数によるクラスポインタの取得を説明します。 object が WSCvtoggle クラスのインスタンスであり、トグルの選択状態を 調べる、WSCvtoggle のメンバ関数 setStatus() にアクセスしたい場合の例 です。

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 クラスを継承している!
  }


}

異なるクラスの複数のインスタンス/クラスにまたがって 利用するイベントプロシージャにおいて、クラスを判別するのに便利です。

Document Release 3.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | 目次

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005