c++学习 GP部分
llllllillll
垃圾程序猿一枚
展开
-
c Templates学习笔记10: 模板实参演绎
1.演绎的过程 针对一个函数调用, 演绎过程会比较“调用实参的类型”和“函数模板对应的参数化类型(T)”,如果分析过程发生矛盾,则该演绎过程失败。 即使被演绎的模板参数一致性确定,也可能因为替换的模板实参可能会导致无效的构造失败。 template<typename T> typename T::ElementT at(T const& a, int i) { ret...原创 2019-11-12 15:12:46 · 161 阅读 · 0 评论 -
C Templates学习笔记⑨:实例化
一:On-Demand实例化 有时候也被称为隐式实例化或者自动实例化。 On-demand实例化表明:在使用模板(特化)的地方,编译器通常需要访问模板和某些模板成员的整个定义。 例子: template<typename T> class C;//前置声明 C<int>* p = 0;//正确,因为这里不需要知道c<int>的定义 templat...原创 2019-11-12 11:24:33 · 203 阅读 · 0 评论 -
C Templates学习笔记⑧:模板中的名称
1.受限名称和依赖型名称:如果一个名称使用: :或 . ->来显示作用域,则为受限名称。如果一个名称依赖于模板参数,我们称它为依赖型名称。 一:名称查找 受限名称和非受限名称的查找: int x; class B { public: int i; }; class D : public B { }; void f(D* pd) { pd->i = 3;//...原创 2019-11-08 16:02:28 · 247 阅读 · 0 评论 -
C Templates学习笔记⑦:深入模板基础
对前面一些基础知识的深入和补充。 一些模板例子: template <typename T> class List { public: template <typename T2> List(List<T2> const&); }; template <typename T> template <typename T2>...原创 2019-11-07 20:19:15 · 228 阅读 · 0 评论 -
C Templates学习笔记六:模板术语
一:类模板 与 模板类 注1.类和联合被称为类类型。 二:实例化和特化 三:声明和定义 四:一处定义原则 ODR 注:和全局变量与静态数据成员一样,非内联函数和成员函数只能被定义一次。 类类型和内联函数在每个翻译单元中最多被定义一次,如果存在多个翻译单元,所有的定义都必须是等同的。 五:模板实参和模板参数 ...原创 2019-11-07 14:22:58 · 191 阅读 · 0 评论 -
C Templates学习笔记五:模板实战
使用分离模型 让模板定义和声明在不同的文件里可能会导致链接错误。 为了解决这种问题,我们把模板的声明和定义都放在同一个头文件里。 例如: #ifdef MYFIRST_HPP #define MYFIRST_HPP #include <iostream> #include <typeinfo> template <typename T> void p...原创 2019-11-07 14:10:05 · 257 阅读 · 0 评论 -
C TEMPLATES学习笔记四:技巧性基础知识
一:关键字typename typename的另一个用法: 告诉编译器把一个特殊的名字理解为类型。 如下: template <typename T> class MyClass { typename T::SubType * ptr; }; template<typename T> class MyClass { T::SubType * ptr; }; ...原创 2019-11-06 17:46:41 · 1260 阅读 · 0 评论 -
C Templates学习笔记三:非类型模板参数
对于函数模板和类模板,模板参数并不局限于类型,值也可以作为模板参数。 一:非类型的类模板参数 实例: template<typename T, int MAXSIZE> class Stack { private: T elems[MAXSIZE]; int numElems; public: Stack(); void push(T const&); ...原创 2019-11-06 15:16:54 · 249 阅读 · 0 评论 -
C Templates学习笔记二:类模板
一:类模板的实现 实例: #include <vector> #include <stdexcept> template <typename T> //类模板声明部分 同样可以使用class T为模板参数 class Stack { private: std::vector<T> elems; public: //Stack(); /...原创 2019-11-06 14:10:08 · 215 阅读 · 0 评论 -
C Templates学习笔记一:函数模板
最近正在学习c++模板部分的知识,在此做了一些笔记以便加深记忆。 1.定义 形如: template<typename T> inline T const& max(T const& a, T const& b) { return a > b ? a : b; } 等价于: template<class T> inline T ...原创 2019-11-06 10:19:32 · 232 阅读 · 0 评论