免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4393 | 回复: 11
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-13 18:57 |只看该作者 |倒序浏览
本帖最后由 xyfree 于 2012-01-21 03:30 编辑

论坛徽章:
0
2 [报告]
发表于 2011-08-14 09:56 |只看该作者
只要你不嫌麻烦,你大可做个 typelist,把所有基本的整数类型塞进去,然后在里面暴搜……

可是干嘛不直接用 int64_t?

论坛徽章:
0
3 [报告]
发表于 2011-08-14 14:24 |只看该作者
本帖最后由 xyfree 于 2012-01-21 04:12 编辑

论坛徽章:
0
4 [报告]
发表于 2011-08-14 15:16 |只看该作者
在不支持stdint的编译器上自己typedef一下就行了,非要简单的问题复杂化吗

论坛徽章:
0
5 [报告]
发表于 2011-08-14 16:18 |只看该作者
既然楼主喜欢折腾,我们就来折腾折腾~~
VS2010 和 g++ 4.3.4 编译通过。
  1. #include <climits>

  2. #include <iostream>
  3. #include <typeinfo>

  4. using namespace std;

  5. struct NullType {};

  6. template <typename First, typename Rest>
  7. struct TypeList
  8. {
  9.     typedef First first;
  10.     typedef Rest rest;
  11. };

  12. template <typename List1, typename List2>
  13. struct AppendList
  14. {
  15.     typedef TypeList<typename List1::first, typename AppendList<typename List1::rest, List2>::type > type;
  16. };

  17. template <typename List2>
  18. struct AppendList<NullType, List2>
  19. {
  20.     typedef List2 type;
  21. };

  22. template <typename List, template <typename T> class Predicate, bool ok = Predicate<typename List::first>::yes>
  23. struct FindIf;

  24. template <template <typename T> class Predicate, bool ok>
  25. struct FindIf<NullType, Predicate, ok>
  26. {
  27.     typedef NullType type;
  28. };

  29. template <typename List, template <typename T> class Predicate>
  30. struct FindIf<List, Predicate, true>
  31. {
  32.     typedef typename List::first type;
  33. };

  34. template <typename List, template <typename T> class Predicate>
  35. struct FindIf<List, Predicate, false>
  36. {
  37.     typedef typename FindIf<typename List::rest, Predicate>::type type;
  38. };

  39. typedef TypeList<signed char,
  40.         TypeList<signed short int,
  41.         TypeList<signed int,
  42.         TypeList<signed long int,
  43. #ifdef LLONG_MAX
  44.         TypeList<signed long long int,
  45. #endif
  46.         NullType>
  47. #ifdef LLONG_MAX
  48.         >
  49. #endif
  50.         > > > SignedTypes;

  51. typedef TypeList<unsigned char,
  52.         TypeList<unsigned short int,
  53.         TypeList<unsigned int,
  54.         TypeList<unsigned long int,
  55. #ifdef ULLONG_MAX
  56.         TypeList<unsigned long long int,
  57. #endif
  58.         NullType>
  59. #ifdef ULLONG_MAX
  60.         >
  61. #endif
  62.         > > > UnsignedTypes;

  63. typedef AppendList<SignedTypes, UnsignedTypes>::type IntTypes;

  64. template <size_t size>
  65. struct SizePredicate
  66. {
  67.     template <typename T>
  68.     struct predicate
  69.     {
  70.         static const bool yes = (sizeof(T) == size);
  71.     };
  72. };

  73. int main()
  74. {
  75.     cout<<typeid(FindIf<IntTypes, SizePredicate<4>::predicate>::type).name()<<endl;
  76.     return 0;
  77. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-08-22 12:14 |只看该作者
本帖最后由 xyfree 于 2012-01-21 04:10 编辑

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2011-08-22 12:57 |只看该作者
想当年俺也用模板折腾过这个,后来发现还是tmd stdint.h来得简单,哪个编译器不支持stdint.h老子就不支持这个编译器{:3_183:}

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
8 [报告]
发表于 2011-08-22 14:00 |只看该作者
stdint多好,非要自己搞...
我们那边还写那些恶心的U64,S64

论坛徽章:
0
9 [报告]
发表于 2011-08-22 14:21 |只看该作者
本帖最后由 xyfree 于 2012-01-21 05:56 编辑

论坛徽章:
0
10 [报告]
发表于 2011-08-22 15:49 |只看该作者
想当年俺也用模板折腾过这个,后来发现还是tmd stdint.h来得简单,哪个编译器不支持stdint.h老子就不支持这 ...
koolcoy 发表于 2011-08-22 12:57



    这个是c99里面的东西,ms的编译器很多都不支持嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP