Runtime Concept 的模拟(2)

本文介绍了一种改进的 Runtime Concept 模拟方法,通过优化虚基类与模板子类的函数转发机制来减少调用层级,并实现了多线程安全的单例模式。文中详细解释了如何针对不同形状类实现绘制功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
Runtime Concept 的模拟(2)
上一篇基本模拟了Runtime Concept,但有些缺陷。
改之。

基本原理:
1. 按concept的约束函数创建一个虚基类,然后在模板<T>的子类里实现函数转发。
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:
    
struct ctablebase
    
{
        
virtual void *cloneT(void *pointer) const = 0;
        
virtual void deleteT(void *pointer) const = 0;
        
virtual void draw(void *pointer, monitor device) const = 0;
        
virtual void global_drawShape(void *pointer, monitor device) const = 0;
    }
;
    template 
<class T>
    
struct ctable : public ctablebase
    
{
        
static ctablebase* vtable()
        
{
            
static ctable static_table;
            
return &static_table;
        }

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

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

        
void draw(void *pointer, monitor device) const
        
{
            
if (0static void (T::*pdraw)(monitor) const = &T::draw;
            reinterpret_cast
<T*>(pointer)->draw(device);
        }

        
void global_drawShape(void *pointer, monitor device) const
        
{
            
if (0static void (*pdrawShape)(const T&, monitor) = &::drawShape;
            ::drawShape(
*reinterpret_cast<T*>(pointer), device);
        }

    }
;

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

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

    
    template 
<class T>
    Shape(
const T& t) : pointer(new T(t)), ptable(ctable<T>::vtable()) {}
    
    Shape(
const Shape& rhs) : pointer(rhs.ptable->cloneT(rhs.pointer)), 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()
    
{
        ptable
->deleteT(pointer);
    }

}
;

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、付费专栏及课程。

余额充值