当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

Boost中利用的泛型编程技术[VC/C++编程]

赞助商链接



  本文“Boost中利用的泛型编程技术[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1、何谓泛型编程

泛型编程(Generic Programming)关注于产生通用的软 件组件,让这些组件在差别的利用场所都能很简单地重用.在C++中,类模板和函 数模板是举行泛型编程极其有效的机制.有了这两大利器,我们在实现泛型化的 同时,并不需求付出效率的代价.

作为泛型编程的一个简单例子,让我们 看一下在C库中若何让memcpy()函数泛型化.一种实现办法大概是这样的:

void* memcpy(void* region1, const void* region2, size_t n)
{
  const char* first = (const char*)region2;
  const char* last = ((const char*)region2) + n;
  char* result = (char*)region1;
  while (first != last)
    *result++ = *first++;
  return result;
}

这个memcpy()函数已经 在一定程度上举行了泛型化,采纳的办法是利用void*,这样该函数便可以拷贝不 同范例的数组.但假如我们想拷贝的数据不是放在数组里,而是由链表来存放呢 ?我们能不能扩大这个概念,让它可以拷贝肆意的序列?看看memcpy()的函数体 ,这个函数对传入的序列有一个_最小需求_:它需求用某种情势的指针来遍历这 个序列;拜候指针正指向的元素;把元素写到目的地;对比指针以判断什么时刻终止 拷贝.C++尺度库把这样的需求举行分组,称之为概念(concepts).在这个例子 中就有输入迭代器(对应于region1)和输出迭代器(对应于region2)这两个概 念.

假如我们把memcpy()用函数模板重写,利用输入迭代器和输出迭代器 作为模板参数来描写对序列的需求,我们便可以写出一个具有较高重用性的copy ()函数:

template <typename InputIterator, typename OutputIterator>
OutputIterator
copy(InputIterator first, InputIterator last, OutputIterator result)
{
  while (first != last)
    *result++ = *first++;
  return result;
}

利用这个泛型的copy()函数,我们可以拷贝各种各样的序列,只要 它满意了我们指定的需求.对外供应了迭代器的链表,比方std::list,也可以通 过我们的copy()函数来拷贝:

#include <list>
#include <vector>
#include <iostream>
int main()
{
  const int N = 3;
  std::vector<int> region1(N);
  std::list<int> region2;

  region2.push_back (1);
  region2.push_back(0);
  region2.push_back(3);

  std::copy(region2.begin(), region2.end(), region1.begin ());

  for (int i = 0; i < N; ++i)
     std::cout << region1[i] << " ";
   std::cout << std::endl;
}


  以上是“Boost中利用的泛型编程技术[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 开启ReadyBoost功效 加快Windows7
  • <b>C++ boost正则表达式用法</b>
  • <b>gtest的彩色信息输出 + boost.test的内存泄露检测及定位</b>
  • <b>Boost Test学习总结(C++)</b>
  • <b>C++内存管理改革(4): boost::object_pool</b>
  • Boost中利用的泛型编程技术
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .