RTTI 関数

wxWidgets は現在の標準 C++ RTTI よりも以前から,独自の RTTI (ランタイム型識別: Run-Time Type Identification) システムを使っており, 現在でも以前のバージョンとの互換性のために残っています.また,独自 RTTI を残しているのは,標準 RTTI がサポートしていない (クラス名前から クラスを作成するといった) 機能を持っているからでもあります.

標準 C++ RTTI は全く問題なくユーザコードで利用でき,一般的には, 何らかの wxWidgets のクラスを修正したり追加したいと思わない限り, この節で説明する関数やマクロを使う必要はありません.

See also

RTTI overview



CLASSINFO



wxClassInfo * CLASSINFO(className)

クラスに関連付けられた wxClassInfo オブジェクトへのポインタを 返します.

Include files

<wx/object.h>



DECLARE_ABSTRACT_CLASS



DECLARE_ABSTRACT_CLASS(className)

クラス宣言の中で使い,そのクラスがクラス階層中で既知ではあるが, クラスのオブジェクトは動的に生成できないようなクラスであると宣言します. DECLARE_CLASS と同じです.

例:

class wxCommand: public wxObject
{
  DECLARE_ABSTRACT_CLASS(wxCommand)

 private:
  ...
 public:
  ...
};

Include files

<wx/object.h>



DECLARE_APP



DECLARE_APP(className)

ヘッダ内で使い,IMPLEMENT_APP で実装された wxGetApp 関数の前方宣言を生成します. className& wxGetApp(void) の宣言を生成します.

例:

  DECLARE_APP(MyApp)

Include files

<wx/app.h>



DECLARE_CLASS



DECLARE_CLASS(className)

クラス宣言の中で使い, そのクラスがクラス階層中で既知ではあるが,クラスのオブジェクトは 動的に生成できないようなクラスであると宣言します. DECLARE_ABSTRACT_CLASS と同じです.

Include files

<wx/object.h>



DECLARE_DYNAMIC_CLASS



DECLARE_DYNAMIC_CLASS(className)

クラス宣言の中で使い, そのクラスのオブジェクトはランタイム型情報から動的に生成されるべきで あると宣言します.

例:

class wxFrame: public wxWindow
{
  DECLARE_DYNAMIC_CLASS(wxFrame)

 private:
  const wxString& frameTitle;
 public:
  ...
};

Include files

<wx/object.h>



IMPLEMENT_ABSTRACT_CLASS



IMPLEMENT_ABSTRACT_CLASS(className, baseClassName)

C++ の実装ファイル中で使い,ランタイム型情報を持つクラスの宣言を 完結させます. IMPLEMENT_CLASS と同じです.

Example:

IMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject)

wxCommand::wxCommand(void)
{
...
}

Include files

<wx/object.h>



IMPLEMENT_ABSTRACT_CLASS2



IMPLEMENT_ABSTRACT_CLASS2(className, baseClassName1, baseClassName2)

C++ の実装ファイル中で使い,ランタイム型情報と二つの基底クラスを持つ クラスの宣言を完結させます. IMPLEMENT_CLASS2 と同じです.

Include files

<wx/object.h>



IMPLEMENT_APP



IMPLEMENT_APP(className)

アプリケーションクラスの実装を行っているファイル中で使い, アプリケーションの動的構築を行うためにwxWidgets にアプリケーション クラスを認識させます.古い形式:

  MyApp myApp;

の代わりに以下の新しい形式:

  IMPLEMENT_APP(MyApp)

を使ってください.

DECLARE_APP も参照してください.

Include files

<wx/app.h>



IMPLEMENT_CLASS



IMPLEMENT_CLASS(className, baseClassName)

C++ の実装ファイル中で使い,ランタイム型情報を持つクラスの宣言を 完結させます. IMPLEMENT_ABSTRACT_CLASS と同じです.

Include files

<wx/object.h>



IMPLEMENT_CLASS2



IMPLEMENT_CLASS2(className, baseClassName1, baseClassName2)

C++ の実装ファイル中で使い,ランタイム型情報と二つの基底クラスを持つ クラスの宣言を完結させます. IMPLEMENT_ABSTRACT_CLASS2 と同じです.

Include files

<wx/object.h>



IMPLEMENT_DYNAMIC_CLASS



IMPLEMENT_DYNAMIC_CLASS(className, baseClassName)

C++ の実装ファイル中で使い,ランタイム型情報を持ち,インスタンスを 動的に生成できるようなクラスの宣言を完結させます.

例:

IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)

wxFrame::wxFrame(void)
{
...
}

Include files

<wx/object.h>



IMPLEMENT_DYNAMIC_CLASS2



IMPLEMENT_DYNAMIC_CLASS2(className, baseClassName1, baseClassName2)

C++ の実装ファイル中で使い,ランタイム型情報を持ち,インスタンスを 動的に生成できるようなクラスの宣言を完結させます. 二つの基底クラスを持つようなクラスにはこちらを使ってください.

Include files

<wx/object.h>



wxConstCast



classname * wxConstCast(ptr, classname)

このマクロは,コンパイラが const_cast をサポートしている場合には const_cast<classname *>(ptr) に,サポートしていない場合には 古い C スタイルのキャストに展開されます.

See also

wx_const_cast
wxDynamicCast
wxStaticCast



::wxCreateDynamicObject



wxObject * wxCreateDynamicObject(const wxString& className)

指定したクラスが DECLARE ... と IMPLEMENT ... マクロを使って動的クラス システムに登録済みである場合,そのクラスのオブジェクトを生成して返します.



WXDEBUG_NEW



WXDEBUG_NEW(arg)

デバッグモードでは,ファイル名と行番号を伴うよう再定義された new 演算子として定義されています.定義は以下のようになります:

#define WXDEBUG_NEW new(__FILE__,__LINE__)

非デバッグモードでは,通常の new 演算子として定義されています.

Include files

<wx/object.h>



wxDynamicCast



classname * wxDynamicCast(ptr, classname)

ポインタ ptrclassname * 型を指す場合 (チェックは実行時に 行われます) classname* 型へのキャストを返します.そうでない場合には NULL を返します.wxObject::IsKindOf() 関数は撤廃されており, このマクロを使うよう勧めます.

引数 ptrNULL でもよく,その場合には NULL を 返します.

例:

    wxWindow *win = wxWindow::FindFocus();
    wxTextCtrl *text = wxDynamicCast(win, wxTextCtrl);
    if ( text )
    {
        // a text control has the focus...
    }
    else
    {
        // no window has the focus or it is not a text control
    }

See also

RTTI overview
wxDynamicCastThis
wxConstCast
wxStaticCast



wxDynamicCastThis



classname * wxDynamicCastThis(classname)

このマクロは wxDynamicCast(this, classname) と同じです. wxDynamicCast(this, classname) はコンパイラによっては見当違いの コンパイル時警告を引き起こすため,このマクロを使って回避してください.

See also

wxDynamicCast



wxStaticCast



classname * wxStaticCast(ptr, classname)

このマクロは,デバッグモードにおいてキャストが有効化チェック (wxDynamicCast(ptr, classname) == NULL の場合にはアサーション 失敗になります) し,static_cast<classname *>(ptr) と等価な コードの実行結果を返します.

See also

wx_static_cast
wxDynamicCast
wxConstCast



wx_const_cast



T wx_const_cast(T, x)

コンパイラが const キャストをサポートする場合には const_cast<T>(x) と同じになり,古いコンパイラでは (T)x になります. wxConstCast と違い,T * ではなく T へのキャストを行い, 引数の順番は標準のキャストと同じようになります.

See also

wx_reinterpret_cast,
wx_static_cast



wx_reinterpret_cast



T wx_reinterpret_cast(T, x)

コンパイラが再解釈キャスト (reinterpret cast) をサポートする場合には reinterpret_cast<T>(x) に,古いコンパイラの場合には (T)x になります.

See also

wx_const_cast,
wx_static_cast



wx_static_cast



T wx_static_cast(T, x)

コンパイラが静的キャスト (static cast) をサポートする場合には static_cast<T>(x) に,古いコンパイラの場合には (T)x になります.wxStaticCast と違い, チェックを行いません.また,マクロの引数の意味は標準の静的キャスト と全く同じです.すなわち, T は完全な型名で,アスタリスクを 追加することはありません.

See also

wx_const_cast,
wx_reinterpret_cast

ymasuda 平成17年11月19日