荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: mmkiller (好叉烧烦), 信区: Program
标  题: Re: 新手求教??
发信站: 荔园晨风BBS站 (Thu Mar 16 16:25:14 2006), 站内

Boost中应用的泛型编程技术

原文出处:http://www.cpphelp.net/issue/gpt.html



译者:Merlin Ran
英文原文:http://www.boost.org/more/generic_programming.html

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
OutputIterator
copy(InputIterator first, InputIterator last, OutputIterator result)
{
while (first != last)
*result++ = *first++;
return result;
}

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

#include #include
#include
int main()
{
const int N = 3;
std::vector region1(N);
std::list 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;
}




【 在 achang (阿昌) 的大作中提到: 】
: standard c++是没有的
: .net才有


--

 *┌*┬*┬╮┌*┬*┬╮╭*╮  ╮*╭*┬*┬*╮╭╮    *╭*╮    *╭*┬─*╮╭*┬─*
 *│*┤*│*│*│*┤*│*│*│┤  │  │*┤  │*┤    *│*┤    │┤    *│*┤  │
 *│*┤*│*││*┤*│*│*├*┴*┬*╯  │*┤  *│*┤    │*┤    *│*┼*─*╯├*?
 *╰╯*╯*╯*╰*╯*╯*╯*╰*╯*╰*╯╰*┴*┴*╯*╰*┴*─*╯*╰*┴*─*╯╰┴*─╯


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.110.120]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店