当前博客:火山PC-模板类,模板基础类,模板实现类

334 次浏览


本文算是奇"银"技巧,毕竟官方的数组都没有采用这样的方式

首先上c++模板写法

template 
class 你的模板类
{
//....
};
//--------调用---------
//你的模板类<数据类型>  实例对象;
//例如
你的模板类  cs;

首先说下 , 上面C++代码的 T 是模板类型 在C++里面是几乎可以随意起名的 ,但是火山不可以 
官方给你提供好了 8个 :  模板类型1  ->  模板类型8   

这些类型都只存在于火山界面,不存在于翻译后的源码里,在翻译过程是直接翻译到实现类对应类的模板类型(有点拗口!!!),举例就是下图的 "整数"

整数数组  会被直接翻译成如下形式(当然下面并不是实际结果):

calss 整数数组 : public vector { };

那么火山如何实现这个表达呢?

官方采取的方法是 嵌入类成员 

//例如
class 数组类
{
public: CMarry<模板类型1>  my_arry;
};

调用的时候就就是一系列的 嵌入方法 等等 ,此处不再深究,但是不管怎样 都是 要写一遍  my_arry.    
而本文是采用纯继承类,也许并不影响效率 但是,小编看着就难受
最重要的是如果没有对象,只是方法那怎么办? 本文的方法也未测试...手动滑稽,你们可以动手试试

本文 以c++ vector 容器为例,先上结果图

①模板基础类 :这个是最基础的

②包含头文件然后继承std::vector 

继承类通常不是应该采用@视窗.后缀文本 吗? 

是,但是对于继承模板类就行不通了,因为火山翻译@视窗.后缀文本是直接加到类声明后面的

@视窗.后缀文本   "std::vector<模板类型1>" //这样是行不通的 , 模板类型1为被直接翻译进c++源码里,结果 就是报错 ,因为不存在这个类型

最后测试发现 @外部基础类  属性值 的 模板类型1  会被翻译 

但实测过程发现 此属性值 并不能识别到 std::    故又使用@视窗.前缀文本  "using namespace std; "     //使用std命名空间

但是 涛哥又说了 火山所有类必须继承对象类  但是 外部基础类又不允许有基础类(写了也不起作用,并不会被翻译)

因此又添加 @视窗.后缀文本   "CVolObject  "   来继承 这个全局的默认基础类 

----------如此 就实现了 火山vector模板类 继承 std::vector 模板类   ,而不是 采用类成员变量模板形式 

下面就是 写成员函数的过程了 .... 能少写  像 my_arry.     类成员变量名  ,最重要的是 官方的数组库 被弄得花里胡哨的 看不懂!!!

这个模板类下面 写上公共的函数即可 

非共有的 可以在具体的 模板实现类里 下面写

比如 vector 也可以用来当字节集 ,如图


说明下测试整数数组测试结果   

官方的数组 与 vector 如果不写  预分配尺寸   百万次加入成员   用时  官方数组大概是vector 的10倍 

如果有提前 写  预分配尺寸  则两者相差不大 ,正常情况还是vector 性能略微优胜


其他模板封装姿势自行研究

火山PC之C++STL容器模板,vector,queue,stack,map

火山PC-模板类,模板基础类,模板实现类