SophiaFramework UNIVERSE 5.3 |
SFXTypeInfo クラスは、 型情報(SFXTypeInfo::TypeId)を提供するクラスです。
型情報を取得するには、 SFXTypeInfo::GetTypeId 関数に取得したい型をテンプレートパラメータとして渡して呼び出します。
注意 | |
---|---|
型情報は、 同じ実行環境であれば任意の 2 つの型の型情報の値は同じ型であれば同じ値、 異なる型であれば異なる値になります。 また、同じ型でも型情報の値は、 実行環境が異なれば異なる値になる可能性があることに注意してください。 |
メモ | |
---|---|
SFXTypeInfo::TypeId と SFXTypeInfo::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 //
[ public, static ] TypeId GetTypeId<T>( T * param = null // 型をとるための引数(値は何でもよい) );
この関数は、 テンプレートパラメータで指定された型に対する型情報 (SFXTypeInfo::TypeId)の値を取得します。
具体的な値は、 T 型の場合は SFKTypeInfo<T>::address() 関数へのポインタ値になります。
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
[public] SFMTYPEDEFALIAS(_sfxtypeinfo_type_id, TypeId) typedef Void (*_sfxtypeinfo_type_id)(VoidPtr param);
型情報を表す型です。
型情報の値は、SFXTypeInfo::GetTypeId 関数により取得できます。 具体的な値は、 T 型の場合は SFKTypeInfo<T>::address() 関数へのポインタ値になります。
注意 | |
---|---|
型情報は、 同じ実行環境であれば任意の 2 つの型の型情報の値は同じ型であれば同じ値、 異なる型であれば異なる値になります。 また、同じ型でも型情報の値は、 実行環境が異なれば異なる値になる可能性があることに注意してください。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |