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<typename _Tp>

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

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

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

不过,因为都源自同一个 class template ,似乎在逻辑上很清晰了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值