24#define zfcast(T_To, obj) (_ZFP_ObjCast<T_To, 0>::c(obj))
30#define zfcastNoExt(T_To, obj) (_ZFP_ObjCast<T_To, 1>::c(obj))
32#define _ZFP_ObjCastInternal(T_To, obj) \
33 static_cast<T_To>(obj)
38template<
typename T_Type,
int isZFObject>
47template<
typename T_Type>
51 return obj ? obj->toObject() :
zfnull;
54template<
typename T_Type>
58 return obj.toObject();
61template<
typename T_Type>
72template<
typename T_ZFObjectTo,
int noExt>
75 template<
typename T_ZFObjectFrom>
76 static T_ZFObjectTo c(T_ZFObjectFrom
const &obj) {
80template<
typename T_ZFObjectTo>
83 template<
typename T_ZFObjectFrom>
84 static T_ZFObjectTo c(T_ZFObjectFrom
const &obj) {
90#define _ZFP_ObjCastTypeZFObject 1
91#define _ZFP_ObjCastTypeZFInterface 2
92#define _ZFP_ObjCastTypeUnknown 3
94#define _ZFP_ObjCastType(TrType) \
95 (zftIsZFObject(TrType) \
96 ? (zftIsTypeOf<TrType, ZFObject>::Value \
97 ? _ZFP_ObjCastTypeZFObject \
98 : _ZFP_ObjCastTypeZFInterface \
100 : _ZFP_ObjCastTypeUnknown)
105template<
typename T_To,
int noExt>
108 template<
typename T_From>
109 static inline T_To c(
ZF_IN T_From
const &obj);
111template<
int T_CanCastDirectly,
int noExt,
typename T_To,
typename T_From,
int T_ToType,
int T_FromType>
116template<
int noExt,
typename T_To,
typename T_From,
int T_ToType,
int T_FromType>
117zfclassNotPOD _ZFP_ObjCastH<1, noExt, T_To, T_From, T_ToType, T_FromType> {
119 static inline T_To c(
ZF_IN T_From
const &obj) {
120 return static_cast<T_To
>(obj);
124template<
int noExt,
typename T_To,
typename T_From>
125zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeZFObject, _ZFP_ObjCastTypeZFObject> {
127 static inline T_To c(
ZF_IN T_From
const &obj) {
129 ? _ZFP_ObjCastImpl<T_To, noExt>::c(obj)
134template<
int noExt,
typename T_To,
typename T_From>
135zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeZFInterface, _ZFP_ObjCastTypeZFObject> {
137 static inline T_To c(
ZF_IN T_From
const &obj) {
139 ?
static_cast<T_To
>(obj->classData()->_ZFP_ZFClass_interfaceCast(
146template<
int noExt,
typename T_To,
typename T_From>
147zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeZFObject, _ZFP_ObjCastTypeZFInterface> {
149 static inline T_To c(
ZF_IN T_From
const &obj) {
151 ? _ZFP_ObjCastImpl<T_To, noExt>::c(obj->toObject())
156template<
int noExt,
typename T_To,
typename T_From>
157zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeZFInterface, _ZFP_ObjCastTypeZFInterface> {
159 static inline T_To c(
ZF_IN T_From
const &obj) {
161 ?
static_cast<T_To
>(obj->classData()->_ZFP_ZFClass_interfaceCast(
168template<
int noExt,
typename T_To,
typename T_From,
int T_ToType>
169zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, T_ToType, _ZFP_ObjCastTypeUnknown> {
171 static inline T_To c(
ZF_IN T_From
const &obj) {
172 return _ZFP_ObjCast<T_To, noExt>::c(_ZFP_zfanyCast(obj));
176template<
int noExt,
typename T_To,
typename T_From,
int T_FromType>
177zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeUnknown, T_FromType> {
179 static inline T_To c(
ZF_IN T_From
const &obj) {
184template<
int noExt,
typename T_To,
typename T_From>
185zfclassNotPOD _ZFP_ObjCastH<0, noExt, T_To, T_From, _ZFP_ObjCastTypeUnknown, _ZFP_ObjCastTypeUnknown> {
187 static inline T_To c(
ZF_IN T_From
const &obj) {
188 return T_To(_ZFP_zfanyCast(obj));
193template<
typename T_To,
int noExt>
194template<
typename T_From>
195inline T_To _ZFP_ObjCast<T_To, noExt>::c(
ZF_IN T_From
const &obj) {
198 return _ZFP_ObjCastH<
202 _ZFP_ObjCastType(T_ToTmp), _ZFP_ObjCastType(T_FromTmp)
212 template<
typename T_From>
213 static inline const void *c(
ZF_IN T_From
const &obj) {
214 return (
const void *)_ZFP_zfanyCast(obj);
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:196
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define zfnullT
type for zfnull, can be used for function overload
Definition ZFCoreTypeDef_CoreType.h:85
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
#define zftIsZFObjectType(Type)
true if Type can cast to ZFObject
Definition ZFObjectClassTypeFwd.h:123
#define zftIsZFObject(Type)
true if Type is ZFObject type or ZFInterface type
Definition ZFObjectClassTypeFwd.h:107
base class of all objects
Definition ZFObjectCore.h:195
std::is_base_of wrapper
Definition ZFCoreUtilTemplate.h:461
type traits similar to STL's traits
Definition ZFCoreUtilTemplate.h:100
T_Type TrType
normal type
Definition ZFCoreUtilTemplate.h:107