Runtime Concept 的模拟(3)

/*
Runtime Concept 的模拟(3)
虚函数转发,太间接了。
改之。

基本原理:
1. 自己实现vtable。
2. 同时转发<T>的new和delete,实现存值。

缺陷:
1. 成员函数的调用方法不知道是不是符合标准,不过估计移植性没什么问题。
2. static应该改为多线程安全的Singleton。
3. 太复杂。

另:
1. VC的非虚成员函数指针居然可以指向虚函数并正常调用,诡异。
2. 引用方式的concept只要去掉new和delete的调用即可。
*/


#include 
< stdio.h >
#include 
< vector >
#include 
< algorithm >
#include 
< string >

typedef FILE
*  monitor;
struct  Rectangle
{
    
void draw(monitor device) const
    
{
        fprintf(device, 
"Rectangle.draw ");
    }

    
void draw() const
    
{
        printf(
"Rectangle.draw ? ");
    }

}
;

struct  Ellipse
{
    
virtual void draw(monitor device) const
    
{
        fprintf(device, 
"Ellipse.draw virtual ");
    }

}
;

struct  Triangle
{
    
int draw(monitor device, int another_arg) const
    
{
        fprintf(device, 
"Triangle.draw? ");
        
return 0;
    }

}
;

void  drawShape( const  Rectangle  & refShape, monitor device)
{
    refShape.draw(device);
}


void  drawShape( const  Ellipse  & refShape, monitor device)
{
    refShape.draw(device);
}


void  drawShape( const  Triangle  & refShape, monitor device)
{
    refShape.draw(device, 
0);
}


// concept
class  Shape
{
private:
    typedef Shape 
object;
    template 
<class T>
    
struct ctable
    
{
        typedef T
* (T::*tcloneT)() const;
        typedef 
void (T::*tdeleteT)();
        typedef 
void (T::*tdraw)(monitor device) const;
        typedef 
void (*tglobal_drawShape)(const T &refShape, monitor device);
        tcloneT pcloneT;
        tdeleteT pdeleteT;
        tdraw pdraw;
        tglobal_drawShape pglobal_drawShape;
        ctable() : 
            pcloneT(reinterpret_cast
<tcloneT>(&ctable::cloneT)), 
            pdeleteT(reinterpret_cast
<tdeleteT>(&ctable::deleteT)), 
            pdraw(
&T::draw),
            pglobal_drawShape(
&::drawShape) {}
        
        
static ctable* vtable()
        
{
            
static ctable static_table;
            
return &static_table;
        }

        T 
*cloneT() const
        
{
            
return new T(*reinterpret_cast<const T*>(this));
        }

        
void deleteT()
        
{
            delete reinterpret_cast
<T*>(this);
        }

    }
;

    
object *pointer;
    ctable
<object> *ptable;
    
object *cloneT() const
    
{
        
return (pointer->*ptable->pcloneT)();
    }

    
void deleteT()
    
{
        (pointer
->*ptable->pdeleteT)();
    }

public:
    
void draw(monitor device) const
    
{
        (pointer
->*ptable->pdraw)(device);
    }

    
static void drawShape(const Shape &refShape, monitor device)
    
{
        (
*refShape.ptable->pglobal_drawShape)(*refShape.pointer, device);
    }

    
    template 
<class T>
    Shape(
const T& t) : 
        pointer(reinterpret_cast
<object *>(new T(t))), 
        ptable(reinterpret_cast
<ctable<object>*>(ctable<T>::vtable())) {}
    
    Shape(
const Shape& rhs) : pointer(rhs.cloneT()), ptable(rhs.ptable) {}

    Shape
& operator = (const Shape& rhs)
    
{
        Shape tShape(rhs);
        swap(tShape);
        
return *this;
    }

    
void swap(Shape& rhs)
    
{
        std::swap(pointer, rhs.pointer);
        std::swap(ptable, rhs.ptable);
    }

    
    
~Shape()
    
{
        deleteT();
    }

}
;

void  DrawShapes(monitor device, std::vector < Shape >   const &  g)
{
    std::vector
<Shape>::const_iterator b(g.begin()), e(g.end());
    
for(; b != e; ++b)
    
{
        b
->draw(device);
        Shape::drawShape(
*b, device);
    }

}


int  main( int  argc,  char   * argv[])
{
    std::vector
<Shape> vg;
    vg.push_back(Rectangle());
    vg.push_back(Ellipse());
    vg.push_back(vg[
0]);
    vg.push_back(vg[
2]);
    vg[
3= vg[1];
    
//vg.push_back(Triangle());            //错误,不符合Shape concept
    
//vg.push_back(std::string("xxx"));    //错误,不符合Shape concept

    DrawShapes(stdout, vg);

    
return 0;
}

 
内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值