C++里面的一个technique : Type Traits

在Generic Programming里面,我们会想要知道pass过来的东西的type。
如果是user defined的type,你能够想到的方法是,哦,定义一个标准吧!在所有type里面都要增加一个field,用来说明它是什么type,于是,我在function template都来尝试访问这一个field。
但是,对于一些native的type,比如float,int,你该怎么办呢?

c++里面,常用(STL ,boost, opencv2)的一个technique叫 type traits。
对于,我需要知道type信息的那些type,我尝试给它们每一个定义一个对应的user defined type。
然后,我把信息放在这个user defined type里面。

比如 float 的,我们定义一个user defined type 叫做 float_traits.
比如int  的 ,我们顶一个一个user defined type 叫做 int_traits.

然后,我们可以在这些user defined type里面都加上一个field,比如,叫做typeID,用来表示不同的type的信息。


上面这个好像麻烦了一点。
想要简单,马上能够想到的是,class template,可以根据type的不同,生成一系列的user defined type。
假如这个template就叫 DataType

那么float 的就是 DataType
int的就是DataType

可是,为了实现DataTypeDataType里面包含的信息不同,我们还是没有什么捷径,只能自己去对于float和int分别对待,分别来写它们里面的东西。

实际上,对于我们比较关心的那些types,我们为它写了specializations of the class template..
额,说起来,这和直接为每一个关心的type,写一个对应的user defined type是类似的。

不过,因为都源自同一个 class template ,似乎在逻辑上很清晰了。

你可能感兴趣的:(c++,c++,boost,stl)