首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > 用协变模板参数进行矢量对象操作
【标  题】:用协变模板参数进行矢量对象操作
【关键字】:操作,参数
【来  源】:网络

用协变模板参数进行矢量对象操作

    假设你需要定义一个参数类型为矢量对象、并对该矢量对象进行一定操作的函数,那么该函数必须是类属的(generic),也就是说它应该以同样的方式处理所有的std::vector<T>实例。

然而,由于矢量本身并不是一个完整的类型,你需要确保该函数可以处理各种特定的矢量,如vector<char>、vector<Widget>等等。实现这一目标的最好方法就是把函数定义为一个模板,其参数随着矢量参数T的不同而变化(即协变的)。

在下面的例子中,insert_one()函数模板插入一个默认初始化元素到矢量中去,而无需考虑矢量类型:

#include <vector>
using namespace std;

// 函数insert_one()的参数T
// 随着矢量T的变化而变化
template <class T> void insert_one(vector<T> &v)
{
 T t=T(); // 确保内建类型是默认初始化的(default-initialized)
 v.push_back(t);
}
vector <int> vi;
vector <char> vc;
insert_one(vi);
insert_one(vc);
 

这个代码的工作与我们的预期完全吻合,这是因为矢量例化的时候,编译器会自动产生与之相匹配的函数模板版本。例如,当函数调用如下时:

insert_one(vi);

编译器分析vi的类型并产生与之匹配的函数,如下所示:

insert_one(vector <int> &v);

使用swap()无须中间变量:【上一篇】
使用共享中断,更有效工作:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • [转]setjmp与longjmp机制,很难与C++和睦相处
  • 真正了解Windows xp SP2神秘数字签名
  • DOS命令大全(经典收藏)
  • Linux 2.6内核的精彩世界(转)
  • 用VB学做“黑客”程序
  • 判断一个表是否存在标识列
  • ATMEL 爱特梅尔AVR单片机
  • 写在DOOLOO RTOS测试时……
  • shutdown 自动断电
  • 自做局域网(3)--安装NT Server服务器
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.