Springhead
An open source physics engine for virtual reality, haptics and motion generation.
BaseTypeInfo.h

実行時型情報テンプレートライブラリ. [詳細]

#include "BaseUtility.h"
BaseTypeInfo.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

構成

class  UTTypeInfo
 実行時型情報 [詳細]
 
class  UTTypeInfoImp< T >
 実行時型情報クラスの実装 [詳細]
 
class  UTTypeInfoImpAbst< T >
 実行時型情報クラスの実装.抽象クラス版 [詳細]
 
class  UTTypeInfoObjectBase
 実行時型情報を持つクラスの基本クラス [詳細]
 

ネームスペース

 Spr
 SpatialVector V(v, w) = [v; w]; SpatialTransform X(R, r) = [R^T, -R^T * r%; O, R^T]; ^Tは転置, は外積行列,Oは零行列. X(R, r) * V(v, w) = [R^T * (v + w % r); R^T * w];.
 

マクロ定義

#define DEF_UTTYPEINFODEF(cls)
 実行時型情報を持つクラスが持つべきメンバの宣言部 [詳細]
 
#define DEF_UTTYPEINFOABSTDEF(cls)
 実行時型情報を持つクラスが持つべきメンバの宣言部.抽象クラス版 [詳細]
 
#define DEF_UTTYPEINFO(cls)
 実行時型情報を持つクラスが持つべきメンバの実装. [詳細]
 
#define DEF_UTTYPEINFO1(cls, base1)
 実行時型情報を持つクラスが持つべきメンバの実装.1つのクラス継承をする場合 [詳細]
 
#define DEF_UTTYPEINFO2(cls, base1, base2)
 実行時型情報を持つクラスが持つべきメンバの実装.2つのクラス継承をする場合 [詳細]
 
#define DEF_UTTYPEINFO3(cls, base1, base2, base3)
 実行時型情報を持つクラスが持つべきメンバの実装.3つのクラス継承をする場合 [詳細]
 
#define DEF_UTTYPEINFOABST(cls)
 実行時型情報を持つクラスが持つべきメンバの実装.抽象クラス版 [詳細]
 
#define DEF_UTTYPEINFOABST1(cls, base1)
 実行時型情報を持つクラスが持つべきメンバの実装.抽象クラス版.1つのクラスを継承する場合 [詳細]
 
#define DEF_UTTYPEINFOABST2(cls, base1, base2)
 実行時型情報を持つクラスが持つべきメンバの実装.抽象クラス版.2つのクラスを継承する場合 [詳細]
 
#define DEF_UTTYPEINFOABST3(cls, base1, base2, base3)
 実行時型情報を持つクラスが持つべきメンバの実装.抽象クラス版.2つのクラスを継承する場合 [詳細]
 
#define GETCLASSNAME(p)   (p->GetTypeInfo()->className)
 
#define GETCLASSNAMES(T)   (T::GetTypeInfoStatic()->className)
 
#define DCAST(T, p)   UTDcastImp<T>(p)
 ダイナミックキャスト
 
#define ACAST(T, p)   UTAcastImp<T>(p)
 キャストに失敗するとassertするダイナミックキャスト
 
#define DCASTP(TP, p)   UTDcastpImp<TP>(p)
 ダイナミックキャスト.型名にポインタ型を使うバージョン
 
#define ACASTP(TP, p)   UTAcastpImp<TP>(p)
 キャストに失敗するとassertするダイナミックキャスト.型名にポインタ型を使うバージョン
 

関数

template<class T , class P >
T * UTDcastImp (P p)
 
template<class T , class P >
T * UTAcastImp (P p)
 
template<class TP , class P >
TP UTDcastpImp (P p)
 
template<class TP , class P >
TP UTAcastpImp (P p)
 
char * UTAcastError (const char *)
 キャストに失敗した場合のassert関数
 

説明

コンパイラのrttiを使わずマクロとテンプレートで実装してある.

マクロ定義

#define DEF_UTTYPEINFO (   cls)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = {NULL}; \
static UTTypeInfoImp<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
return NULL; \
} \
#define DEF_UTTYPEINFO1 (   cls,
  base1 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = {base1::GetTypeInfoStatic(),NULL}; \
static UTTypeInfoImp<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
return base1::GetBaseAddress(to); \
} \
#define DEF_UTTYPEINFO2 (   cls,
  base1,
  base2 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { \
base1::GetTypeInfoStatic(), base2::GetTypeInfoStatic(),NULL}; \
static UTTypeInfoImp<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
void* rv = base1::GetBaseAddress(to); \
if (!rv) rv = base2::GetBaseAddress(to); \
return rv; \
} \
#define DEF_UTTYPEINFO3 (   cls,
  base1,
  base2,
  base3 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { \
base1::GetTypeInfoStatic(), base2::GetTypeInfoStatic(), \
base3::GetTypeInfoStatic(), NULL}; \
static UTTypeInfoImp<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
void* rv = base1::GetBaseAddress(to); \
if (!rv) rv = base2::GetBaseAddress(to); \
if (!rv) rv = base3::GetBaseAddress(to); \
return rv; \
} \
#define DEF_UTTYPEINFOABST (   cls)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { NULL }; \
static UTTypeInfoImpAbst<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
return NULL; \
} \
#define DEF_UTTYPEINFOABST1 (   cls,
  base1 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { base1::GetTypeInfoStatic(), NULL }; \
static UTTypeInfoImpAbst<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
void* rv = base1::GetBaseAddress(to); \
return rv; \
} \
#define DEF_UTTYPEINFOABST2 (   cls,
  base1,
  base2 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { base1::GetTypeInfoStatic(), \
base2::GetTypeInfoStatic(), NULL }; \
static UTTypeInfoImpAbst<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
void* rv = base1::GetBaseAddress(to); \
if (!rv) rv = base2::GetBaseAddress(to); \
return rv; \
} \
#define DEF_UTTYPEINFOABST3 (   cls,
  base1,
  base2,
  base3 
)
値:
const UTTypeInfo* cls::GetTypeInfoStatic(){ \
static const UTTypeInfo* base[] = { base1::GetTypeInfoStatic(), \
base2::GetTypeInfoStatic(), base3::GetTypeInfoStatic(), NULL }; \
static UTTypeInfoImpAbst<cls> info(#cls, base); \
return &info; \
} \
void* cls::GetBaseAddress(const UTTypeInfo* to) const{ \
if (to==GetTypeInfoStatic()) return (cls*)this; \
void* rv = base1::GetBaseAddress(to); \
if (!rv) rv = base2::GetBaseAddress(to); \
if (!rv) rv = base3::GetBaseAddress(to); \
return rv; \
} \
#define DEF_UTTYPEINFOABSTDEF (   cls)
値:
public: \
virtual const UTTypeInfo* GetTypeInfo() const { \
return GetTypeInfoStatic(); \
} \
static const UTTypeInfo* GetTypeInfoStatic(); \
virtual void* /*cls::*/GetBaseAddress(const UTTypeInfo* to) const; \
#define DEF_UTTYPEINFODEF (   cls)
値:
public: \
virtual const UTTypeInfo* GetTypeInfo() const { \
return GetTypeInfoStatic(); \
} \
static const UTTypeInfo* GetTypeInfoStatic(); \
virtual void* /*cls::*/GetBaseAddress(const UTTypeInfo* to) const; \