精选文章 泛型vector

泛型vector

作者:sas??? 时间: 2021-02-07 01:46:51
sas??? 2021-02-07 01:46:51
【摘要】2019独角兽企业重金招聘Python工程师标准>>>     #include 
#include 
#include 
#include 
#include 
#include 

class Any {

public:

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

	templa...
#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占位
分享文章到微博
分享文章到朋友圈

上一篇:TCP及socket通信原理

下一篇:ASP.NET学习感悟

您可能感兴趣

  • 文件关联型木马的编程思路

    我们知道一般情况下想在开机启动程序,就要把程序写在注册表中的 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft...

  • 泛说 "COM线程模型"

    COM线程模型在COM相关的基础知识中应该算是难点,难的原因可能有这些: 1.需要对COM其他基础知识有较深的了解(因为这个论题几乎涉及到了COM所有其它的基础知识). 2.学习者得非常了解Win32本身的线程模型(因为在Windows中COM的线程模型在建立在Win32线程模型的基础上的). 3.COM线程模型所引用的概念十分抽象,不好理解 如果你还没有掌握 1,2 所提到的知识点,你可以...

  • Decal SDL-Delphi的范型类库-通用数据结构与算法类库(一)

    1、Decal SDL 通用数据结构与算法类库我个人认为是目前类结构建模建得很好的一个数据结构类库。 介绍Decal的前身是 SDL,一套商业的通用数据结构与算法类库。Decal删除了其中关于垃圾回收部分的代码,而将其他部分全部开放源代码了,这对大家来说是一个好消息。Decal的全称是 Delphi Container and Algorithm Library,也就是Delphi 数据容器...

  • Boost中的范型编程技术

    这篇文章是boost中文档中取出来的,其实并不是很好,只是已经开始翻译了就索性完成它.结果现在看来很多部分是狗屁不通,哈哈,也就让你们看看在不了解技术本身的情况下的翻译可以多糟糕吧.不要砸我呀. 我的网站:taowen.cn.st Generic Programming Techniques 范型编程技术 This is an incomplete survey of some of...

  • [CUJ]泛型编程--转移构造函数

    主题:泛型编程-转移构造函数(Generic Programming: Move Constructor) 作者:Andrei Alexandrescu 编译:死猫 校对:Wang Tianxing 原文: http://www.cuj.com/experts/2102/alexandr.htm 摘要: 本文介绍了使用模板技术消除C++中的不必要的临时对象复制的方法。除此之外,本文中使用了不...

  • “泛型Java”,一个美丽的hype

    “泛型Java”,一个美丽的hype 今天,Sun发布了J2SE 1.5新特性的一个原型实现版本。这个运行在J2SE 1.4上的插件提供了J2SE 1.5主要的几项新特性,例如类型安全的枚举、自动装箱/拆箱、增强的for循环等,当然还有最受关注的JSR-14,泛型。 在试用了这些新特性之后,我终于对Java的泛型彻底失望了。首先,我们来看看泛型Java的经典用法: import java.u...

  • 用vector取代C-style的数组

    用vector取代C-style的数组     提起数组,大家想必都很熟悉,你可以用索引和指针来操作数组,给程序设计带来了很大的灵活性。但是你知道它有许多天生的缺陷吗?     首先,数组的越界可能会引起程序的崩溃(如果崩溃了,还算你走运^_^)。其次是动态性不好,包括动态改变大小,动态申请。诸如此类的事,一定会让你伤透脑筋。有什么办法可以解决这些问题吗? 你不用担心,下面我来给大家介绍一种...

  • 泛型编程:再现Min和Max

    泛型编程:再现Min和Max作者: Andrei Alexandrescu(陶章志译) 原文出处:http://www.cuj.com/documents/s=7996/cujcexp1904alexandr/在1995年1月,Scott Meyers 在C++ Report杂志上就强调"min,max 对C++社团来说是一个很大的挑战",他对基于macro-based实现的min,max...

CSDN

CSDN

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

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

免费套餐,马上领取!
泛型vector介绍:华为云为您免费提供泛型vector在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多泛型vector的相关内容。| 移动地址: 泛型vector | 写博客