woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

C++ Type traits的简单用法

昨天研究了C++ type traits,我们在使用C++的模板的时候,有时我们需要确定模板中的T究竟是什么类型的,这时候我们就要用到type traits.

比如我们定义一个比较大小的函数:

template < typename T > less(const T & a, const T & b);

我们需要在Tint,double,string时设计不同的算法,一种可以选择的方案就是函数重载。不过我们也可以用type traits的方法来确定T是什么类型的。这个需要用到template的偏特化。

比如我们设计一个判断一个类是不是 int 型的类,如下

template < typename T > class is_int { static const bool value = false};

表示默认所有的类都不是int型的,然后我们对int型偏特化,如下

template <> class is_int {static const bool value = true;};

这样,对于任意给定的类T,我们都可以用 is_int<T>::value 来判断他是不是整型的。

这种方法相对于函数重载的好处是,他是编译时就可以判断好的,而重载是在运行时才判断的,这种方法可以节约一点微不足道的时间,嘿嘿!

 

posted on 2008-11-08 22:50 肥仔 阅读(2929) 评论(3)  编辑 收藏 引用 所属分类: C++ 模板

评论

# re: C++ Type traits的简单用法  回复  更多评论   

重载是在编译时刻判断的,而不是运行时刻判断,多态才是运行时刻判断的
2009-03-13 10:07 | www

# re: C++ Type traits的简单用法  回复  更多评论   

template <> class is_int {static const bool value = true;};这是特化不是偏特化。关于traits你才开个头,继续
2010-01-17 20:20 | luren

# re: C++ Type traits的简单用法[未登录]  回复  更多评论   

那两行代码中唯一出现的类型是和int没有必然联系的bool,所以理论上不可能会对int有必然关系。事实上lz应该写错或者抄错了。第二句应该是这样:
template <> class is_int<int> {static const bool value = true;};
这才是偏特化/partial specialization的正确语法,主义尖括号内的int。
2011-04-16 02:24 | Alex

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理