| WideStudio Programming Guide | WideStudio Index 目次

> ## 特定のオブジェクトクラスのポインタを取得するには

> 特定のクラスのAPIにアクセスする場合、そのクラスのポインタでなければ なりません。従ってなんらかの形で、そのクラス型のポインタを取得してい なければなりません。ここではそのクラス型のポインタの取得の方法を説明 します。
> - WSCbaseクラスの cast() メンバ関数による取得

>   クラスポインタ取得API | 機能
>   void* WSCbase::cast(char* className) | 指定されたクラス名のポインタを返値します。

> 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.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | 目次

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004