本文算是奇"银"技巧吧
,毕竟官方的数组都没有采用这样的方式
首先上c++模板写法
template
class 你的模板类
{
//....
};
//--------调用---------
//你的模板类<数据类型> 实例对象;
//例如
你的模板类 cs;
Markup
Copy
首先说下 , 上面C++代码的 T 是模板类型 在C++里面是几乎可以随意起名的 ,但是火山不可以
官方给你提供好了 8个 : 模板类型1 -> 模板类型8
这些类型都只存在于火山界面,不存在于翻译后的源码里,在翻译过程是直接翻译到实现类对应类的模板类型(有点拗口!!!),举例就是下图的 "整数"
整数数组 会被直接翻译成如下形式(当然下面并不是实际结果):
calss 整数数组 : public vector { };
Markup
Copy
那么火山如何实现这个表达呢?
官方采取的方法是 嵌入类成员
//例如
class 数组类
{
public: CMarry<模板类型1> my_arry;
};
Markup
Copy
调用的时候就就是一系列的 嵌入方法 等等 ,此处不再深究,但是不管怎样 都是 要写一遍 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-模板类,模板基础类,模板实现类-利快云博客阅读 (lkuaiy.com)