struct TypeInfo
{
public:
template<typename Args>
void ConstructObject(void* obj, MemoryAllocator* alloc, Args&& args)const;
bool IsDerviedOf(const TypeInfo* base)const;
public:
virtual TIType GetTIType()const = 0;
virtual const InterfaceMap* GetInterfaces()const;
virtual jushort GetMemorySize()const;
virtual ConstText GetName() const;
virtual AString GetFullName()const;
virtual jushort GetAlignSize() const;
virtual ConstText GetSpaceName()const;
virtual const TypeInfo* GetBaseTypeTI()const;
virtual const TypeInfo* GetPointeedTI()const;
virtual size_t GetHashCode(const void* obj)const;
virtual bool IsValueType()const { return true; }
virtual bool IsClass()const { return true; }
virtual bool DoInitAllocator(void* obj, MemoryAllocator* memAlloc)const;
virtual bool NeedDestruct()const { return false; }
virtual void DoDefaultConstruct(void* obj)const;
virtual bool CanDefaultConstruct()const { return true; }
virtual void DoAssign(void* dest, const void* src)const;
virtual bool Equals(const void* objA, const void* objB)const;
virtual void DoDestruct(void* obj)const;
};
template<typename Ty> struct TypeInfoImp
{
typedef Ty type;
static const bool value = THasGetTypeInfoMethod<Ty>::value;
};
template<typename Ty>
struct TypeInfoImp<const Ty> : public TypeInfoImp<Ty>
{
typedef typename TypeInfoImp<Ty>::type type;
static const bool value = TypeInfoImp<Ty>::value;
};
template<typename Ty>
const TypeInfo* TypeOf()
{
typedef typename TypeInfoImp<Ty>::type TypeInfoProvider;
return TypeInfoProvider::GetTypeInfo();
}
template<typename Ty>
const TypeInfo* TypeOf(const Ty& obj)
{
typedef typename IsRttiType<Ty>::type is_rtti; //又是间接层,对动态类型和非动态类型分别处理
return ImpTypeOf(obj, is_rtti());
}
template<>
struct TypeInfoImp < bool >
{
static const bool value = true;
typedef TypeInfoImp<bool> type;
static TypeInfo* GetTypeInfo();
};
TypeInfo* TypeInfoImp<bool>::GetTypeInfo()
{
static TypeInfo* ti = CreateNativeTypeInfo<bool>("bool");
return ti;
}
template<typename FstTy, typename SndTy>
struct TypeInfoImp < std::pair<FstTy, SndTy> >
{
static const bool value = true;
typedef TypeInfoImp < std::pair<FstTy, SndTy> > type;
static TypeInfo* GetTypeInfo()
{
ParamsTypeInfo<FstTy, SndTy> args;
return PodPair::LookupTemplateTypeInfo(args);
}
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有