自包含容器是一种自包含的结构,很有趣。需要使用模板类,但只有在模板类型是该类的子类时,才使该类具有自包含的结构。这种结构从数据结构的角度看比较有用。通常的树类中的模板通常是“数据”的概念,即模板不参与树结构的逻辑,只作为树结点的一个额外的、附加的数据看待。但在自包含的树结点结构中,模板作为树结点的子类出现。

一、自包含树结点类

这样可以解决某种问题,即原来通常意义下的树结点类,如果子类实现了更多的功能,但子类的孩子结点却还是原来的树结点类。当然我们可以强制转换成树结点子类,但必须保证在添加孩子结点的时候都必须添加树结点子类,如果万一添加了树结点类,那么这种转换就不会成功,再操作就会有崩溃的风险。

那么就希望树结点子类的孩子节点仍然是树结点的子类。这样不存在类型强制转换,也就不存在转换失败的风险。这就是自包含树结点,即

template <class T>
class CSelfTreeNode
{
private:
    vector<T> m_children;
}

当然,只有这个结构还构不成“自包含”,需要子类在继承的时候,模板类是他自己,即(假设子类名是 CDerivedSelfTreeNode)

class CDerivedSelfTreeNode : public CSelfTreeNode<DerivedSelfTreeNode *>
{

}

二、自包含列表结点

同时可以看到,如果我们把上面自包含树结点修改一下,就变成了一个自包含列表。好似将两个镜子相对,镜子里就会出现N多子镜子一样的效果。

template <class T>
class CSelfListNode
{
private:
    T m_t;
}

同样,我们需要子类的继承来实现自包含,即

class CDerivedSelfListNode : public CSelfListNode<CDerivedSelfListNode *>
{

}

三、一点点设想

突然有个想法,如果这种自包含的类结构用在分形理论的程序设计上,而不是用递归,是不是会带来一些意想不到的效果呢?(注:只是猜想,并没有实际去验证。)

【原创】Self-Contained Container(自包含容器)的更多相关文章

  1. Init Container(初始化容器)

    在很多应用场景中,应用在启动之前都需要进行如下初始化操作. ◎ 等待其他关联组件正确运行(例如数据库或某个后台服务). ◎ 基于环境变量或配置模板生成配置文件. ◎ 从远程数据库获取本地所需配置,或者 ...

  2. 【原创】大数据基础之Spark(2)Spark on Yarn:container memory allocation容器内存分配

    spark 2.1.1 最近spark任务(spark on yarn)有一个报错 Diagnostics: Container [pid=5901,containerID=container_154 ...

  3. bootstrap3中container与container_fluid容器的区别

    声明:转自 CSDN博客 .container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并 ...

  4. 【原创】基于Docker的CaaS容器云平台架构设计及市场分析

    基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...

  5. Flutter——Container组件(容器组件)

    名称 功能 alignment topCenter:顶部居中对齐 topLeft:顶部左对齐 topRight:顶部右对齐 center:水平垂直居中对齐 centerLeft:垂直居中水平居左对齐 ...

  6. css 禁用浏览器滚动条,初始最外层包含容器 wrapper

    浏览器默认的视窗会随着滚动条滚动,绝对定位的元素会随着滚动条滚动,为了解决这个问题我们需要禁止浏览器的滚动条,然后在代码的最外层初始化一个 div(最外层包含容容器代替默认的视窗),是滚动天出现在最外 ...

  7. SAP Container Controls(容器)

    BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...

  8. windows container (docker) 容器资料笔记

    背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...

  9. React 设计模式 --- Container and Presentational pattern(容器和展示组件分离)

    在React开发中,一个典型的React组件通常会混杂着逻辑操作部分和展示部分.逻辑操作部分指的是和页面UI无关的内容,如API的调用,数据的处理,事件处理函数. 展示部分则指的是创建页面UI 的内容 ...

随机推荐

  1. 第八章 高级搜索树 (xa4)红黑树:删除

  2. [leetcode]346. Moving Average from Data Stream滑动窗口平均值

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  3. tp中引入js、css、img的问题

    方法一: 直接把js.css.img放到网站公共目录/Public/下. 然后直接在模板文件中使用__PUBLIC__进行替换. 方法二: 在模块配置文件config.php中配置指定的路径,如下: ...

  4. discuz回贴通知插件实现-显示用户状态设置

    一.完善用户是否开启回贴通知 回贴通知插件建立模块时,指定了核心文件post_set.inc.php   1.创立好数据库 建立独立数据表(不建议直接修改原有的discuz数据库,防止discuz升级 ...

  5. 【深度好文】多线程之WaitHandle-->派生-》Mutex信号量构造

    bool flag = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", ...

  6. Apache虚拟主机/端口多开

    Apache就是强大啊,简单配置一下就可以再开启另一个端口的web服务. 笔者最近使用XAMPP架设php服务端.有一些特别的需求:同样的代码,需要开始不同的端口, 协议类型提供web服务给客户端(h ...

  7. Golang之Mysql事务

    Mysql事务 )原子性 )一致性 )隔离性 )持久性 示例代码 package main import ( "fmt" _ "github.com/go-sql-dri ...

  8. code1213 解的个数 扩展欧几里得

    很不错的题,加深了我对exgcd的理解 (以前我认为做题就是搜索.dp...原来数学也很重要) 理解了几个小时,终于明白了.但我什么都不打算写. 看代码吧: #include<iostream& ...

  9. 并发编程(五)LockSupport

    并发编程(五)LockSupport LockSupport 提供 park() 和 unpark() 方法实现阻塞线程和解除线程阻塞,实现的阻塞和解除阻塞是基于"许可(permit)&qu ...

  10. OSGi 系列(七)之服务的监听、跟踪、声明等

    OSGi 系列(七)之服务的监听.跟踪.声明等 1. OSGi 服务的事件监听 和 bundle 的事件监听类似,服务的事件监听是在服务注册.注销,属性被修改的时候,OSGi 框架会发出各种不同的事件 ...