c++ misc code 继承和模板

#include <iostream>
#include <cstdint>
#include <atomic>

using namespace std;

template<typename ERange>
class CGlobalSeqT
{
public:
    typedef uint32_t SEQ_T;

    static SEQ_T Gen(bool next = true)
    {
        static CGlobalSeqT<ERange> instance;
        if (next)
        {
            return instance.Next();
        }
        else
        {
            instance.Reset();
            return 0;
        }
    }

private:
    CGlobalSeqT()
        : m_min((SEQ_T)ERange::MIN)
        , m_max((SEQ_T)ERange::MAX)
        , m_seq((SEQ_T)ERange::MIN - 1)
    {
        static_assert((SEQ_T)ERange::MIN < (SEQ_T)ERange::MAX, "invalid range");
    }

    inline uint32_t Next()
    {
        SEQ_T expected_max = m_max;
        if (m_seq.compare_exchange_strong(expected_max, m_min))
        {
            return m_min;
        }
        else
        {
            return ++m_seq;
        }
    }

    inline void Reset()
    {
        m_seq = m_min - 1;
    }

    SEQ_T m_min;
    SEQ_T m_max;
    std::atomic<SEQ_T> m_seq;
};

class CInboundGlobalSeq : public CGlobalSeqT<CInboundGlobalSeq>
{
public:
    enum ERange { MIN = 0, MAX = UINT32_MAX };
};

class COutboundGlobalSeq : public CGlobalSeqT<COutboundGlobalSeq>
{
public:
    enum ERange { MIN = 2000, MAX = 2002 };
};

int main()
{
    cout << "inbound:" << CInboundGlobalSeq::Gen() << "," << CInboundGlobalSeq::Gen() << endl;
    cout << "1.outbound:"
         << COutboundGlobalSeq::Gen() << ","
         << COutboundGlobalSeq::Gen() << ","
         << COutboundGlobalSeq::Gen() << ","
         << COutboundGlobalSeq::Gen() << endl;
    COutboundGlobalSeq::Gen(false);
    cout << "2.outbound:" << COutboundGlobalSeq::Gen() << "," << COutboundGlobalSeq::Gen() << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/albumcover/p/9128586.html

时间: 2024-10-10 13:06:32

c++ misc code 继承和模板的相关文章

ahjesus code simith 存储过程模板

<%------------------------------------------------------------------------------------------ * Author: Eric J. Smith * Description: This template will generate standard CRUD stored procedures for a given * database table. ----------------------------

Flask(五)flash在模板中使用继承,模板的模板

Project name :Flask_Plan templates:templates static:static 继续上一篇文章. 我们不希望每个页面都写一遍引入js,css,导航条------ 那么我们使用模板继承的方法. 首先修改templates/plan.html 为 templates/base.base 再创建一个plan.html {% extends 'base.html' %} 代码真的只有这一行,别找了. 重新访问我们的页面. 你会发现和没改之前一样. 这个时候模板pla

条款41: 区分继承和模板

· 当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类.· 当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类. 下面的代码通过定义一个链表来实现Stack类,假设堆栈的对象类型为T: template<class T> class stack { public: stack(); ~stack(); void push(const T&object); T pop(); bool empty()const; private: struct stackNode

Django Template模板层 (下) ----------- 过滤器、人性化过滤器、模板继承、模板加载

---恢复内容开始--- 过滤器 除了模板标签可以帮助我们对数据或者进行逻辑处理.django 中还提供了一款工具叫做过滤器,过滤器也可以实现一些模板变量的运算,判断或是其他逻辑处理. add 语法: {{ var1|add:var2 }} add 过滤器可以实现 var1 与 var2 的相加,并且在遇到其他相同数据类型的,比如列表时,加号还可以重载为拼接功能 过滤器首先会将数据转换成Int类型,进行相加,如果转换失败,则会尝试使用 Python 中的数据类型 列表.元祖等这样的数据类型来进行

django 模板的继承

django中模板继承操作: 模板继承 模板继承允许你建立一个基本的"骨架"模板, 它包含你所有最常用的站点元素 并 定义了一些可以被子模板覆盖的block. 这非常有用,例如各大门户网站左边一般有导航栏,在导航栏点击不同的区域时,只有中间<body>部分的内容更新了,而<body>标签之外的内容没有变.就像博客园一样 如何使用母模板和子模板? {% block title %}母模板的标题{% endblock %} {% block title %}子模板的

HTML # 模板继承和导入

### conmon.html body{ margin: 0; } ### master.htm <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title%}ttt{% endblock %}</title> <link rel="stylesheet" h

《Flask web开发》笔记2:模板---继承、bootstrap

前言:今天重新梳理了一下前端方面的知识,发现学习东西还是要用,不然忘得快,废话不多说,开始!! 一.模板继承 1.概念:   书上说,模板继承,类似Python上的继承: 其实个人觉得和所有继承都一样. 2.应用场景:当我们写一系列类似的jinja模板的时候发现,我们总是在重复做些无用的操作,{%%}这东西敲得也蛮累的,这时候就需要引入模板继承: 3.例子: 步骤1. 先建立一个模板,作为 '基类': jilei.html: <html> <head> {% block head

模板的继承

会用继承,会用一些模板, 但是模板的继承是什么鬼: 百度如下: 模板类的继承包括四种: 1.(普通类继承模板类) template<class T> class TBase{ T data; …… }; class Derived:public TBase<int>{ …… }; 2.(模板类继承了普通类(非常常见)) class TBase{ …… }; template<class T> class TDerived:public TBase{ T data; ……

[js高手之路]Node.js模板引擎教程-jade速学与实战4-模板引用,继承,插件使用

一.block 模块复用 把需要复用的模块用block定义 block后面跟上模块的名字,引用一次block 内容就会被复用一次 编译之后的结果: 二,继承模板(extends) 在实际开发中,网站的头部,尾部一般都是公用的,我们可以通过jade的模板继承( extends ) 功能,把公共部分抽象出来,然后让不同的页面继承这些公共部分, 而且继承过来之后还可以重写 新建一个layout.jade模板 这是一个公共的模板,如果我们的首页需要这个公共模板,同时首页需要修改这个公共模板的布局部分(