C++笔记--模板

  • 一个string模板

    •   简单的定义

       1 template <class C>//模板形式,C是一个类型名字,不一定是某个类的名字
       2 class String{
       3     struct srep;
       4     srep *rep;
       5 public:
       6     String();
       7     String(const C*);
       8     String(const String&);
       9
      10     C read(int i)const;
      11 };
      String <char > cs;//这些是使用的方法,模板的一些定义
      String <unsigned char> us;
      String <wchar_t>ws;
      class Jchar{
      };
      String <Jchar>js;

      标准库里面有一个base_string模板,很像string模板,所以把前者也是定义为string的同义词:typedef base_string<char>string;

    •   定义一个模板:通常我们是先写一个完整的类,然后再去把它转变为模板类,这样可以避免很多不必要的错误。
      •   定义模板类的成员:不必非得定义在模板类中,可以定义在模板外,但是必须显式的定义他们,他们的参数也是模板化的

        template <class C> struct String<C>::srep{
            C *s;//到元素的指针
            int sz;//元素个数
            int n;//引用计数
        }
        template <class C> C String <C> ::read(int i)const{return rep->s[i];}
      • 通常类模板的名字是不能重载的,如果一个地方定义了一个类模板,它的名字就不能用来去定义一个相同的名字的普通类。
    •   模板实例化:从一个模板类和一个模板参数生成一个类声明的过程;而针对一个特定的模板参数的模板成为专门化。
      •   

        String <char> cs;//这里生成了两个类,cs和js,以及他们的析构和构造函数
        void f(){
            String<Jchar> js;
        }
    • 模板参数:一个模板可以有多个参数,一个模板参数可以定义跟随其后的模板参数。
    •   类型等价,类型检查:与模板参数有关的错误能被检查出来的最早的位置是在:这个模板针对这个参数第一个使用的地方。称为实例化点
  •   函数模板
    •   函数模板的参数:如果不能从模板函数推断出某个模板参数,就只能显示的描述。
    •   函数模板的重载
      •   可以声明同一个名字的多个函数模板。还可以声明同名的函数和函数模板的组合。
        •   
      •   重载解析规则

        •   
  •   用模板参数描述策略
    •   默认模板参数:只有一些不是很平常的比较算法才需显示给出。
  •   模板专门化:
    •   
时间: 2024-11-05 14:36:20

C++笔记--模板的相关文章

C++ Primer笔记 模板

1 函数模板 template <typename T> T compare(const T & v1,const T &v2) { return .. } 编译器承担了为每种类型编写函数的单调工作. inline template<typename T> inline T min(const T&,const T&) 2 类模板 template<class T> class Q{ T fun(); } 3. 形参屏蔽外部变量 模板形参

django book学习笔记——模板高级进阶

1.RequestContext和Context处理器 当你不想在一系例模板中都明确指定一些相同的变量时,你应该使用 RequestContext .例如: from django.template import loader, RequestContext def custom_proc(request):     "A context processor that provides 'app', 'user' and 'ip_address'."     return {     

django book学习笔记——模板

1.模板系统的基本知识 模板是一个文本,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档. 2.如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 1).可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象; 2).调用模板对象的render方法,并

读书笔记--模板与泛型编程

了解隐式接口和编译期多态 编译期多态和运行期多态 运行期多态就好比是virtual函数再运行的时候才确定该virtual函数该被绑定为哪个函数,运行的时候才确定函数类型. 编译期多态就好比是泛型编程和模板编程中,在编译的时候才确定哪个函数该被调用,根据函数的类型去确定. 显示接口和隐式接口 显示接口由函数的签名式构成 class widget{ public: widget(); virtual ~widget(); virtual std::size_t size() const; virtu

Thinkphp学习笔记-模板主题

一个模块如果需要支持多套模板文件的话,就可以使用模板主题功能. 默认情况下,没有开启模板主题功能,如果需要开启,设置 DEFAULT_THEME 参数即可: // 设置默认的模板主题 'DEFAULT_THEME' => 'default' 采用模板主题后,需要在视图目录下面创建对应的主题目录,和不启用模板主题的情况相比,模板文件只是多了一层目录: View/User/add.html // 没有启用模板主题之前 View/default/User/add.html // 启用模板主题之后 在视

flask web开发笔记 -- 模板

业务(business logic 比如插入数据库)和展示逻辑(presentation logic, 比如生成返回)最好分开,展示逻辑可以放置在模板中.模板是一个包含响应文本的文件,用占位符变量表示动态部分.rendering(渲染):把占位符用实际值代替,并返回最终响应字符串.Flask采用模板引擎Jinja2. 模板引擎Jinja2 简单的模板:templates/index.html <h1>Hello World!</h1> 带参数的模板:templates/user.h

学习笔记——模板模式Template

模板模式,主要是利用多态来实现具体算法和父类逻辑的松耦合.父类中TemplateMethod内部定义了相应的算法操作顺序,子类负责实现相应的具体实现. 举例: 项目中曾遇到过一个需求,叫做高级价格体系.它对外的调用接口一致,只是在不同的应用场景下(比如普通消费和会员卡消费)计算方法有差异,简化计算流程: 1.初始化相应数据A() 2.执行价格计算B() 3.计算完成后的提示C() 等. 父类中的接口函数Run()将此顺序固定为: Run() { A(); B(); C(); } 不同场景下的子类

MVC笔记-模板页布局

@Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") @RenderSection("header", required: false) <!-- 子页插入到head的入口.相当于母版页里的ContentPlaceHolder --> @{Html.RenderAction("LoginInfo", "Partial&

ThinkPHP5 笔记-模板

模板中 {:url('admin/add')} 生成的是入口文件/模块/控制器/方法  即{:url('模块/控制器/方法')} 如:/index.php/admin/admin/add.html 在当前模版文件中包含其他的模版文件使用include标签,标签用法: {include file='模版文件1,模版文件2,...' /} 可以一次包含多个模版,例如: {include file="public/header,public/menu" /}