Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53858
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 152
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-06 21:55
文章分类

全部博文(14)

文章存档

2015年(2)

2014年(12)

我的朋友

分类: C/C++

2015-11-21 04:19:02

阅读stl源码剖析第三章,写了个traits例程, foo函数可以对iterator的类型做出推断,包括原生指针。

点击(此处)折叠或打开

  1. #include <iostream>
  2. using namespace std;
  3. template <typename T>
  4. class MyIterator {
  5. public:
  6.     typedef T value_type;
  7. };

  8. template <typename T>
  9. class Traits {
  10. public:
  11.     typedef typename T::value_type value_type;
  12. };

  13. template <typename T>
  14. class Traits<T *> {
  15. public:
  16.     typedef T value_type;
  17. };

  18. template <typename I>
  19. void foo(I i) {
  20.     //typename means type, not member function
  21.     cout << "typeid = " << typeid(typename Traits<I>::value_type).name() << endl;
  22. }

  23. int main() {
  24.     MyIterator<char> mi;
  25.     MyIterator<string> ms;
  26.     int *pi = NULL;
  27.     foo(mi);
  28.     foo(ms);
  29.     foo(pi);
  30. }

阅读(337) | 评论(0) | 转发(0) |
0

上一篇:继续吧

下一篇:没有了

给主人留下些什么吧!~~