模版

C++模版:偏特化和函数模版的小技巧

戏子无情 提交于 2020-05-04 02:17:35
偏特化就是部分特化。 利用模版的偏特化,可以实现一些类型过滤。 比如,我想让一个类模版指定类型如int能编译过,其他编译不过,代码实现如下: template <typename T> class A; template<> class A<int> { }; int main() { A<int> a; A<double> b; //error return 0; } 以上代码,通用的模版没有实现,只实现了int的特化模版,这样class A就只接受int类型的模版形参了。 同理,我们也能实现让指定类型如int不能编译过,其他都能编译过,代码如下: template <typename T> class A {}; template<> class A<int>; int main() { A<int> a; //error A<double> b; return 0; } 函数模版比类模版多了一个参数传入的过程,所以可以省略模版参数,因为可以从传入的参数推导。比如: #include<iostream> using namespace std; template< typename T> int func(T a, T b) { cout << a + b << endl; return a + b; } int main() { func<int>(3, 4); func(3

c++模版的使用(template)

喜夏-厌秋 提交于 2019-12-07 13:04:43
1. 模板的概念。 我们已经学过 重载(Overloading) ,对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为 求两个数的最大值 ,我们定义MAX()函数需要对不同的数据类型分别定义不同 重载(Overload) 版本。 // 函数1. int max( int x, int y); {return(x>y)?x:y ;} // 函数2. float max( float x, float y){ return (x>y)? x:y ;} // 函数3. double max( double x, double y) {return (c>y)? x:y ;} 但如果在主函数中,我们分别定义了 char a,b; 那么在执行max(a,b);时 程序就会出错,因为我们没有定义char类型的重载版本。 现在,我们再重新审视上述的max()函数,它们都具有同样的功能,即求两个数的最大值,能否只写一套代码解决这个问题呢?这样就会避免因重载函数定义不 全面而带来的调用错误。为解决上述问题C++引入模板机制, 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。 2. 函数模板的写法 函数模板的一般形式如下:

学习CSS你必须踩得那些坑(一)

雨燕双飞 提交于 2019-12-04 19:34:12
目标 按照 Sketch 设计稿,实现一个完整的页面,希望你学完这一些列课程后,能够系统地掌握 CSS ,真正玩转CSS 课程内容 首先下载素材文件( Windows用户可以下载pdf版 ) 设计稿 用Sketch打开文件后(可能会出现找不到字体的问题, 字体下载 ),你可以通过commad+ 1 将Artboard缩放至视口大小。 按住control + L可以显示出栅格系统,栅格系统可以帮你快速排版。 如果你不熟悉sketch,想了解更多,同时不占用你写代码的时间,可以看看 这篇用Sketch制作登录页面的教程 。 我们之后会单独推送一期sketch的教程,现在还是主要关注代码。 准备工作 新建一个html文件和css文件 ├── css │ └── style.css └── index.html 页面 模版 还记得在HTML的课程中,为了保持代码的一致性并节省时间,保存的html模板么 大多数编辑器都允许你按照自己的风格定制模板 如果你用的atom,参考atom代码补全snippets配置。 <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <title>CSS Lesson 1</title> <meta charset="utf-8"> <meta name="viewport" content="width=device