struct IFormatble
{
static TypeInfo* GetTypeInfo();
virtual void Format(TextWriter& stream, const FormatInfo& info) = 0;
virtual bool Parse(TextReader& stream, const FormatInfo& info)
{
PPNotImplement();
}
};
struct ImpIntIFormatble : IFormatble
{
int* mThis; //这一行是关键
virtual void Format(TextWriter& stream, const FormatInfo& info)override
{}
virtual bool Parse(TextReader& stream, const FormatInfo& info)override
{}
};
int aa = 20;
TextWriter stream();
FormatInfo info();
TInterface<IFormatble> formatable(aa); //TInterface这个名字过难看,也没办法了
formatable->Format(stream, info);
double dd = 3.14;
formatable = TInterface<IFormatble>(dd); //假设double也实现IFormatble
formatable->Format(stream, info);
struct ImpIntIFormatble
{
void* vtbl;
int* mThis;
};
struct InterfaceLayout
{
const void* mVtbl;
const void* mThis; //对象本身
const TypeInfo* mTypeInfo; //类型信息
const void* mParam; //补充参数,一般很少用到
};
template<typename IT>
struct TInterface : public InterfaceLayout
{
typedef IT interface_type;
static_assert(is_abstract<IT>::value, "interface must have pure function");
static_assert(sizeof(IT) == sizeof(void*), "Can't have data");
public:
interface_type* operator->()const
{
interface_type* result = (interface_type*)(void*)this;
return result;
}
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有