什么是 concept 技术?

来源:百度知道 编辑:UC知道 时间:2024/05/21 06:55:26
STL 中提到并使用了, 好象是类似约束方面的东东!
哪位大侠能结合实例给俺讲解一下, 尽量通俗一点!
谢谢了先!

在Generic Programming当中,一个重要的概念就是Concept(滑稽的是,如果把这个Concept也翻译成“概念”,那就狗屁不通了。我倾向于说它是 “操作集”)。Concept就是一组操作,如果一个type具有这些操作,那么就说这个type是这个Concept的一个model。
这其中的思想有那么一丁点像是OO当中的interface,一个class如果实现了一个interface,那么它就可以被当作这个interface来用。同样,如果一个type是一个Concept的model,那么所有接受这个Concept的操作也就可以接受这个type。

例如,在STL中,stable_sort这个算法必须接受RandomAccessIterator,这里RandomAccessIterator就是一个 Concept,它规定自己的model必须可以进行下标运算,那么不满足这个Concept的type就无法被编译器接受(搞笑的是我在VC71里面把 list<int> 的iterator传给stable_sort,它居然欣然接受,要知道list的iterator应该只是一个 BidirectionalIterator 啊,比RandomAccessIterator弱多了。不过仔细看看代码,发现VC71的stable_sort接受 BidirectionalIterator就够了,不知道是好还是坏)。在gcc下面如果传递一个BidirectionalIterator给 stable_sort,会得到一堆不知所云的错误提示,让人摸不着头脑。

C++语言本身并没有对于Concept的直接支持,STL解决这个问题的办法是用了一些traits来限制iterator的特性,以达到在编译时期检查Concept的目的。但是traits导致的编译错误提示实在是太可怕了,我非常怀疑有哪个正常人可以从这些错误提示推测出自己错在哪里。

在boost库里面,提供了一个 ConceptCheck库,它可以帮助我们写出带有Concept检查的代码,而且没有运行时的开销,一旦用户违反Concept限制,输出的错误提示也比较好懂。举个例子先,如果STL里面有ConceptCheck,那么它的stable