前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXTypeInfo
型情報を提供するクラスです。
#include <SFXTypeInfo.h.hpp>
class SFXTypeInfo;
SFMTYPEDEFCLASS(SFXTypeInfo)
        

解説

SFXTypeInfo クラスは、 型情報(SFXTypeInfo::TypeId)を提供するクラスです。

型情報を取得するには、 SFXTypeInfo::GetTypeId 関数に取得したい型をテンプレートパラメータとして渡して呼び出します。

[Note] 注意

型情報は、 同じ実行環境であれば任意の 2 つの型の型情報の値は同じ型であれば同じ値、 異なる型であれば異なる値になります。 また、同じ型でも型情報の値は、 実行環境が異なれば異なる値になる可能性があることに注意してください。

[Note] メモ

SFXTypeInfo::TypeIdSFXTypeInfo::GetTypeId 関数は、 SFXAny クラスの実装で使用されています。

内部実装

このクラスの内部実装は、以下の通りです。

typedef Void (*_sfxtypeinfo_type_id)(VoidPtr param);

template <typename T>
class SFKTypeInfo {
    public:
        static  _sfxtypeinfo_type_id            get_type_id                     (Void);
    private:
        static  Void                            address                         (T* param);
};

SFMTYPEDEFCLASS(SFXTypeInfo)
class SFXTypeInfo {
    SFMSEALCONSTRUCT(SFXTypeInfo)
    public:
        SFMTYPEDEFALIAS(_sfxtypeinfo_type_id, TypeId)
    public:
        template <typename T>
        static  TypeId                          GetTypeId                       (T* param = null)
                {
                    unused(param);
                    return SFKTypeInfo<T>::get_type_id();
                }
};

#include <SFXGeneral/SFXEnvironment.h.hpp>

template <typename T>
/*public */inline _sfxtypeinfo_type_id SFKTypeInfo<T>::get_type_id(Void)
{
    return (_sfxtypeinfo_type_id)(&address);
}// SFKTypeInfo<T>::get_type_id //

template <typename T>
/*private */inline Void SFKTypeInfo<T>::address(T* param)
{
    unused(param);
}// SFKTypeInfo<T>::address //

参照

SFXTypeInfo::TypeId | SFXTypeInfo::GetTypeId | SFXAny

メンバ

パブリック関数
static
TypeId
GetTypeId( T * param = null )
指定された型に対する型情報を取得します。
TypeId
型情報を表す型です。

SFXTypeInfo::GetTypeId
指定された型に対する型情報を取得します。
[ public, static ]
TypeId GetTypeId<T>(
    T * param = null   // 型をとるための引数(値は何でもよい)
);

解説

この関数は、 テンプレートパラメータで指定された型に対する型情報 (SFXTypeInfo::TypeId)の値を取得します。

具体的な値は、 T 型の場合は SFKTypeInfo<T>::address() 関数へのポインタ値になります。

[Caution] Visual C++ 6.0 / RVCT for BREW 1.2 を使用する場合

Visual C++ 6.0 / RVCT for BREW 1.2 では、 param 引数に null ポインタを T* 型でキャストした値を指定します。 この場合、テンプレートパラメータの指定は不要です。

使用例

以下は、型の判別するコードです。

SFXTypeInfo::TypeId x;

x = SFXTypeInfo::GetTypeId((SInt32Ptr)(null));

if (x == SFXTypeInfo::GetTypeId((SInt32Ptr)(null))) {
    TRACE("x is SInt32");
}
if (x != SFXTypeInfo::GetTypeId((UInt32Ptr)(null))) {
    TRACE("x is not UInt32");
}

// VC2003 以上、RVCT for BREW 3.0 以上、GNUARM 4.1 、または YAGARTO 4.4 ではこちらも使用できる
#if !((defined TARGET_COMPILER_MSVCPP && TARGET_COMPILER_VERSION < 1300) || (defined TARGET_COMPILER_ARMCPP && TARGET_COMPILER_VERSION < 300000))
if (x == SFXTypeInfo::GetTypeId<SInt32>()) {
    TRACE("x is SInt32");
}
if (x != SFXTypeInfo::GetTypeId<UInt32>()) {
    TRACE("x is not UInt32");
}
#endif

// [結果]
// x is SInt32
// x is not UInt32
// x is SInt32
// x is not UInt32

参照

SFXTypeInfo::TypeId


SFXTypeInfo::TypeId
型情報を表す型です。
[public]
SFMTYPEDEFALIAS(_sfxtypeinfo_type_id, TypeId)

typedef Void (*_sfxtypeinfo_type_id)(VoidPtr param);

解説

型情報を表す型です。

型情報の値は、SFXTypeInfo::GetTypeId 関数により取得できます。 具体的な値は、 T 型の場合は SFKTypeInfo<T>::address() 関数へのポインタ値になります。

[Note] 注意

型情報は、 同じ実行環境であれば任意の 2 つの型の型情報の値は同じ型であれば同じ値、 異なる型であれば異なる値になります。 また、同じ型でも型情報の値は、 実行環境が異なれば異なる値になる可能性があることに注意してください。

参照

SFXTypeInfo::GetTypeId