7.3 C++模板中的函数式参数
参考:http://www.weixueyuan.net/view/6400.html
总结:
模板类至少有一个类参数,但是可以有多个参数,这些参数中可以存在非类类型的参数。 类参数是指 class T,class R T 、R 为类参数。
系统内建的普通数据类型参数或程序自定义的数据类型参数,我们将这种非类类型的参数称之为函数式参数。
例1:
template< class T, int S, double R>
class test
{
//......
};
在本例中例举了函数式参数的用法,在模板头中,先是一个类参数T,之后是两个函数式参数S和R。
例2:
#include <iostream>
using namespace std; template< class T , int S>
class array
{
public:
array();
T & operator[]( int );
const T & operator[] ( int )const;
int getlen()const{ return length; }
~array();
private:
int length;
T * num;
}; template< class T , int S>
array<T, S>::array()
{
num = new T[S];
length = S;
} template< class T , int S>
array<T, S>::~array()
{
delete[] num;
} template< class T , int S>
T & array< T, S > ::operator[] (int i)
{
if( i < || i >= length)
throw string( "out of bounds" );
return num[i];
} template< class T , int S>
const T & array< T, S > ::operator[] ( int i ) const
{
if( i < || i >= length)
throw string( "out of bounds" );
return num[i];
} template< class T , int S>
ostream & operator<<( ostream & out, const array <T, S> & A)
{
for(int i=; i < A.getlen(); i++)
out<< A[i] << " ";
return out;
} int main()
{
array< int, > A;
for(int i = ; i < ; i++)
{
A[i] = *i;
}
cout<< A << endl;
return ;
}
在本例中,我们将前面的array模板类进行了修改,使之有两个参数,一个是类参数T,另一个是函数式参数S。修改后的array模板类用默认构造函数替代了带参构造函数。因为在模板类中添加了一个函数式参数 S 以表示数组的大小,因此我们就不需要在定义对象时利用带参构造函数的参数来确定数组的大小。在前面array模板类,我们需要以以下的方式定义对象:
array< int > A();
array< string > S();
修改后的array,我们只需要按照如下方式定义对象:
array< int, > A;
array< string, > S;
修改后的array类的类名变为了array< T, S >。对于修改后的array类,想要将其实例化则必须提供两个参数的实例,例如:
array< int, > A;
array< double, > D;
都是可以正确实例化并定义对象的,但是如果只提供一个参数则是不可以的,例如:
array< int> A;
array< > D;
这两种情况都是错误的的实例化。
在模板类实例化过程中,我们需要用具体的数据类型来代替类参数,用具体的数值来替换函数式参数,如此才能实例化成功。
7.3 C++模板中的函数式参数的更多相关文章
- C++学习35 模板中的函数式参数
C++对模板类的支持比较灵活,模板类的参数中除了可以有类型参数,还可以有普通参数.例如: template<typename T, int N> class Demo{ }; N 是一个普 ...
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
- C++17尝鲜:类模板中的模板参数自动推导
模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写 std::pair a{1, "a"s}; // C++17 ...
- 如何在模板中引用参数类中的一个特定member
C++模板有很多特性需要我们去挖掘,很多新的设计模式也都与模板使用相关,我们知道模板的一个基本特性就是可以根据传入的类型产生新的类型.围绕这个特性,可以衍生出很多的其它特性,比如自动为不同的类生成st ...
- 【解决了一个小问题】golang gin框架中的模板,让模板中的参数不要做HTML转义
代码中使用了类似的方式来向模板填充参数: c.HTML(200, "list.html", gin.H{"data":builder.String()}) 模板 ...
- 在引用的laravel的@include子模板中传递参数
调用传参: @include("message",['msg'=>'中国']) 在message子模板中调用msg的值: {{msg}}
- Thymeleaf+SpringMVC,如何从模板中获取数据
Thymeleaf+SpringMVC,如何从模板中获取数据 在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对 ...
- django 模板中url的处理
在模板中直接添加‘/home’这样的链接是十分不推荐的,因为这是一个相对的链接,在不同网页中打开可能会返回不一样的结果. 所以推荐的是 <a href="{{ object.get_a ...
随机推荐
- legend2---开发日志2(注释和函数比较好的写法)
legend2---开发日志2(注释和函数比较好的写法) 一.总结 一句话总结: 函数用_接意群 注释的关键字用[]括起来 注释的步骤用中文的步骤二字 1.为何以步骤为名写注释? 结构非常清晰 //步 ...
- 关于Android 主题的那些事
最近遇到了一个问题,主题的ActionBar的Title 颜色是黑色的 但是我的主界面由于用的是CoordinateLayot所以是白色的 整个黑色的就很难看 所以也想要把ActionBar 的Tit ...
- bzoj3529: [Sdoi2014]数表 莫比乌斯反演
题意:求\(\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))(gcd(i,j)<=a),f(x)是x的因子和函数\) 先考虑没有限制的情况,考虑枚举gcd为x,那么有\(\ ...
- 关于.babelrc中的stage-0,stage-1,stage-2,stage-3
文章链接:https://www.cnblogs.com/chris-oil/p/5717544.html
- 发送http请求,get和post两种请求方式
GET请求 GetMethod getMethod=null; String datas = "json=" + plain; HttpClient httpClient = ne ...
- 剑指offer-栈的压入与弹出
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- oracle 如何创建只有查询权限的用户
.create user userName identified by password; .grant select any table to userName; --授予查询任何表 .grant ...
- C# 3.0 / C# 3.5 自动属性
自动属性的好处 自动属性简化了我们在做 C# 开发的时候手写一堆私有成员 + 属性的编程方式,我们只需要使用如下方式声明一个属性,编译器就会自动生成所需的成员变量. 传统属性概念 属性的目的一是封装字 ...
- [CodeForces - 614C] C - Peter and Snow Blower
C - Peter and Snow Blower Peter got a new snow blower as a New Year present. Of course, Peter decide ...
- noip2017奶酪
题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上 ...