精选文章 泛型vector

泛型vector

作者:sas??? 时间: 2015-12-13 09:30:00
sas??? 2015-12-13 09:30:00
#include 
#include 
#include 
#include 
#include 
#include 

class Any {

public:

	//notice this!
	template
	using StorageType = typename std::decay::type;

	template>::value
		&& !std::is_same>::value>::type>
		Any(Ty&& value) :container(new Container>(std::forward(value)))
	{
		std::cout<< "constructor" <container != nullptr) {
			delete (this->container);
			this->container = other.clone();

		}else {
			this->container = other.clone();
		}
	}

	Any(Any&& other)
	{
		if (this->container != nullptr) {
			delete (this->container);
			this->container = other.container;

		}else {
			this->container = other.container;
		}

		other.container = nullptr;
	}


	Any& operator=(Any&& other)
	{
		if (this->container == nullptr) {
			this->container = other.container;

		}else {
			delete (this->container);
			this->container = other.container;
		}

		other.container = nullptr;
	}

	Any& operator=(const Any& other)
	{
		if (this->container != nullptr) {
			delete (this->container);
			(this->container) = other.clone();

		}else {
			(this->container) = other.clone();
		}
		return *this;
	}

	Any() :container(nullptr) {}

	~Any()
	{
		if (container != nullptr)
		{
			delete container;
			(this->container) = nullptr;
		}
	}

	/*
	template
	Ty getValue()const noexcept
	{
		if ((this->container) == nullptr) {
			std::runtime_error("There is nothing!");

		}

			Container>* derived = dynamic_cast>*>(this->container);

			return (derived->data);
	}*/

	template
	Ty getValue()
	{
		if ((this->container) == nullptr) {
			std::runtime_error("There is nothing!");

		}
		
		std::cout << "test" <* derived = dynamic_cast*>(this->container);
		std::cout << "derived-data: " << derived->data << std::endl;

		return (derived->data);
	}

	/*
	template
	operator Ty&()
	{

		/*auto*/
		//std::function function = static_cast(&Any::getValue);

		//Cotainer>* contain = dynamic_cast>*>(this->container);

		//return (contain->data);
	//}

	/*template
	operator Ty()const
	{
		std::function function = static_cast(&Any::getValue);
		return (this->*function());
	}*/


private:

	class ContainerBase {
	public:
		ContainerBase() = default;
		ContainerBase(const ContainerBase& ) = default;
		ContainerBase(ContainerBase&& ) = default;
		ContainerBase& operator=(const ContainerBase& )=default;
		ContainerBase& operator=(ContainerBase&& )=default;

		virtual ~ContainerBase() = default;

		virtual ContainerBase* clone()const noexcept = 0; //pure-virtual function.
	};

	template
	class Container : public ContainerBase {
	public:

		Type data;
		
		Container(Type&& value_) :ContainerBase(),data(value_) {}
		Container(const Type& value_) :ContainerBase(),data(value_) {}
		Container(const Container& other):ContainerBase(other),data(other.data){}
		Container(Container&& other):ContainerBase(other),data(std::move(other.data)){}
		
		Container& operator=(const Container& other)
		{
			ContainerBase::operator=(other);
			this->data = other.data;
		}
		
		Container& operator=(Container&& other)
		{
			ContainerBase::operator=(other);
			this->data = other.data;
		}
		

		virtual ~Container() = default;

		virtual ContainerBase* clone()const noexcept override
		{
			return (new Container>(this->data));
		}
	};

	ContainerBase* clone()const noexcept
	{
		if (this->container == nullptr) {
			return nullptr;

		}else {
			return (this->container)->clone();
		}
	}

	ContainerBase* container;
};

class Eplace_back {
public:
	Eplace_back() = default;
	~Eplace_back() = default;
	Eplace_back(const Eplace_back& other) = delete;
	Eplace_back& operator=(const Eplace_back& other) = delete;

	template
	void operator()(std::vector& vec, Ty&& value)
	{
		std::cout << "pus value in vector" << std::endl;
		vec.emplace_back(std::forward(value));
	}
};


int main()
{
	std::vector myVector;
	Eplace_back emplace_back;
	emplace_back(myVector, 100);
	emplace_back(myVector, 200);
	
	std::cout << myVector[0].getValue() << std::endl;
	std::cout << myVector[1].getValue() << std::endl;
	
	std::cout<< "xxxxxxxxxxxx" <

 

转载于:https://my.oschina.net/SHIHUAMarryMe/blog/543551

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:ASP.NET学习感悟

下一篇:TCP及socket通信原理

您可能感兴趣

  • Caffe源码精读 - 8 - Caffe Layers之yolov3_layer(yolov3 loss计算层)

    Caffe源码精读 - 8 - Caffe Layers之yolov3_layer(yolov3 loss计算层) 1. 概述 yolov3_layer是yolov3模型,处理feature map,计算loss的层。主要就是计算定位损失,bndbox的置信损失和类别置信损失。 2. dx_box_iou(vector pred, vector truth, IOU_LOSS iou_los...

  • 图像处理的方法平移、缩放、扩大(VS2017+Opencv3.4.6)

    1、图像平移: 指的是把原图像初始的坐标(0,0)增加(dx;dy)像素,变成新的图像(初始坐标为(dx;dy))。也就是将原先图像的横坐标和纵坐标分别加上一个数字,变成一个新的坐标,然后将原图中原坐标位置的RGB赋值给新图中新坐标。 #include #include using namespace cv; using namespace std; int main() { Ma...

  • java基础学习笔记(七)-反射--注解

    反射机制介绍 _Class 对象获取 反射机制是 Java 的动态性之一 动态语言 : 在程序运行时,可以改变程序的结构或变量的类型。 典型的动态语言 ”Python 、 ruby 、 JavaScripC,C++, Java 不是动态语言,但具有一定的动态性,可以称为” 准动态语言 ”, 具备类似动态语言的特性。传一块代码来动态的执行,动态的处理,Java 也能做,可以利用反射来实现类似的...

  • 前端实习生面试题分析(一)

    最近面试拿了很多公司的实习offer,只要是面试的都通过了。 接下来就分析下面试题,也能给自己一个提升吧,以便后续的面试更轻车熟路些,题目没什么顺序,想起什么写什么,还有我面试过程中的一些小套路。 估计要写好多,每天写几道题,而且有些经验性的东西也不容易写出来 这篇写的都是类似一些概念性的理论东西。 1.JS防抖和节流 先说为什么要做防抖和节流,针对一些会频繁触发的事件,像scroll、re...

  • 四连涨!海尔智家这波私有化还有多大想象空间?

    文|易牟 来源 | 螳螂财经(ID:TanglangFin) 四连涨!受海尔智家(600690.SH)私有化海尔电器(01169.HK)消息影响,海尔智家连续两个交易日涨停后,又接连两日上攻,股价盘中最高达22.54元,创下今年新高。 截至8月5日收盘,海尔智家主力资金净流入3.68亿元,连续5日净流入12.96亿元,后续上涨势头强劲。 毫无疑问,在投资者的眼中,不管是短期还是中长期,海尔智...

  • 牛客每日练习----数一数,大水题,大佬的生日大礼包

    我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。 ----喻言 链接:https://ac.nowcoder.com/acm/problem/15071 来源:牛客网 题目描述 设s,t为两个字符串,定义f(s,t) = t的子串中,与s相等的串的个数。如f("ac","acacac")=3, f("bab","babab")=2。现在给出n个...

  • 使用spring cloud alibaba-网关(gateway)+安全认证(springsecurity+jwt)

    上一篇博客开头说到了gateway服务之前调用有些特殊,那是因为webflux和spring-webmvc; gateway不兼容spring-webmvc所以项目创建的时候也就剔除了,剔除之后无法使用HttpServletRequest,所以之前搭建的不能简单的替换zuul,改动太大。只能将zuul从安全认证这个模块中移除,然后独立成一个模块供gateway认证时调用。 改造之前的spri...

  • 爱了,3174页实战pdf集锦:Redis+多线程+Dubbo+JVM+kafka+MySQL

    写在前面 作为一名Java开发者,在现在这个信息化时代很快的时代,很少会有人停下脚步去思考以及去总结,忽略了很重要的一个步骤,没有反思和总结,只会用原来固有的想法去做事情,所以还是需要隔一段时间去总结。LZ今天总结了自己在平时会用到的一些: 01—Redis实战 在Redis诞生数年之后的今天,这个项目已经发生了显著的变化:我们现在拥有了一个更为健壮的系统,并且随着Redis 2.6的发布,...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。