1.  
  2. // traits 的应用
  3.  
  4. ///////////////////////////////////////////
  5.  
  6. // traits
  7. template <typename T>
  8. class sigmaTraits
  9. {};
  10.  
  11. // 特化
  12. template <>
  13. class sigmaTraits<char>
  14. {
  15. public:
  16. typedef int returnType;
  17. };
  18.  
  19. template <>
  20. class sigmaTraits<int>
  21. {
  22. public:
  23. typedef int returnType;
  24. };
  25.  
  26. template <>
  27. class sigmaTraits<float>
  28. {
  29. public:
  30. typedef double returnType;
  31. };
  32.  
  33. template <>
  34. class sigmaTraits<double>
  35. {
  36. public:
  37. typedef double returnType;
  38. };
  39.  
  40. ///////////////////////////////////////////
  41.  
  42. #if 0
  43. // char 溢出
  44. template <typename T>
  45. inline T Sigma(const T const* start, const T const* end)
  46. {
  47. typedef T ReturnType;
  48. ReturnType s = ReturnType();
  49. while (start != end)
  50. {
  51. s += *start++;
  52. }
  53.  
  54. return s;
  55. }
  56. #endif // 1
  57.  
  58. #if 1
  59. // 需要 trait 技术
  60. template <typename T>
  61. inline typename sigmaTraits<T>::returnType Sigma(const T const* start, const T const* end)
  62. {
  63. typedef typename sigmaTraits<T>::returnType ReturnType;
  64. ReturnType s = ReturnType();
  65. while (start != end)
  66. {
  67. s += *start++;
  68. }
  69.  
  70. return s;
  71. }
  72. #endif // 1
  73.  
  74. int main()
  75. {
  76. // 需要 trait 技术才能保证计算结果正确。避免char溢出导致结果错误。
  77. char str[] = "abc";
  78. size_t len = strlen(str);
  79. char* pB = str;
  80. char* pE = str + len;
  81.  
  82. printf("%d", Sigma(pB, pE));
  83. }

  

C++ trais技术 模板特化的应用的更多相关文章

  1. C++-函数模板特化如何避免重复定义

     我正在用一个基于模板的库源代码,该库包含一些针对特定类型的模板函数特化.类模板,函数模板和模板函数特化都在头文件中.我在我的.cpp文件中 #include 头文件并编译链接工程.但是为了在整个工程 ...

  2. C++ Primer 学习笔记_84_模板与泛型编程 --模板特化

    模板与泛型编程 --模板特化 引言: 我们并不总是能够写出对全部可能被实例化的类型都最合适的模板.某些情况下,通用模板定义对于某个类型可能是全然错误的,通用模板定义或许不能编译或者做错误的事情;另外一 ...

  3. C++ Primer 学习笔记_85_模板与泛型编程 --模板特化[续]

    模板与泛型编程 --模板特化[续] 三.特化成员而不特化类 除了特化整个模板之外,还能够仅仅特化push和pop成员.我们将特化push成员以复制字符数组,而且特化pop成员以释放该副本使用的内存: ...

  4. C++程序设计方法4:模板特化

    模板参数的具体化/特殊化 有时,有些类型不适用,则需要对模板进行特殊化处理,这称为“模板特化” 对函数模板,如果有多个模板参数,则特化时必须提供所有参数的特例类型,不能部分特化: 如: char *s ...

  5. C++ template —— 模板特化(五)

    本篇讲解模板特化-------------------------------------------------------------------------------------------- ...

  6. C++ 模板特化以及Typelist的相关理解

    近日,在学习的过程中第一次接触到了Typelist的相关内容,比如Loki库有一本Modern C++ design的一本书,大概JD搜了一波没有译本,英文版600多R,瞬间从价值上看到了这本书的价值 ...

  7. 转:C++模板特化的概念

    http://blog.csdn.net/yesterday_record/article/details/7304025 很久没有看C++,在看STL源码剖析时,看到一个function templ ...

  8. oop &&GP 模板 ---> 特化和偏特化

    OOP面向对象编程 GP泛型编程(generic programming) 两者的主要区别就是OOP将数据和对数据的操作放在一起, GP就是将数据和操作独立开来 GP:   数据就是container ...

  9. C++模板特化编程

    在C++中,模板特化是除了类之外的一种封装变化的方法.模板特化可以通过编译器来对不同的模板参数生成不同的代码. 模板特化通常以模板结构体作为载体.常用技法包括:类型定义.静态成员常量定义和静态成员函数 ...

随机推荐

  1. 记一次job不跑的问题

    就在昨晚app后台升级后,发现有个重要的job不跑了,导致业务无法正常的走下去.这时候心里慌得一批,但还好我们有多台服务器影响不大,屁话少说进入主题. 看了下job的实现,发现其使用了java.uti ...

  2. 如何在python中使用Elasticsearch

    什么是 Elasticsearch ​ 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说 ...

  3. Codeforces Round #603 (Div. 2) C. Everyone is a Winner! 二分

    C. Everyone is a Winner! On the well-known testing system MathForces, a draw of n rating units is ar ...

  4. Linux-Bash终端快捷键

    ^C 终正在运行的进程或放弃当前编辑的命令^U 将光标所在字符到行首之间的所有字符删除,可以使用^E到行尾再^U来删除整行内容^Z 将前台运行的进程放入背景并暂停^D 发送EOF,结束当前输入流,如果 ...

  5. GPU跑tf-faster-rcnn demo以及训练自己的数据

    https://blog.csdn.net/qq_39123369/article/details/85245512

  6. PHPStorm设置等号对齐

    为了代码的美观,我们常常会把代码等号设置对齐,手动对齐的效率很低,PHPStrom提供了快捷键来一键对齐. 首先设置PHPStorm 设置完PHPStorm后,使用快捷键Command+Option+ ...

  7. C# 通过反射调用 Func 委托

    C# 通过反射调用 Func 委托 Intro 最近我的 NPOI 扩展库增加了,自定义输出的功能,可以自定义一个 Func 委托来设置要导出的内容,详细介绍请查看 https://www.cnblo ...

  8. 5-API 网关 kong 实战

    原文:https://cloud.tencent.com/developer/article/1477672 1. 什么是Kong? 目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请 ...

  9. Dynamics CRM中的注释(Note)及RollupRequest消息初探

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复161或者20151015可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释,这个实体的架构名称是Ann ...

  10. 工具类Base64Util

    在和服务器交互的过程中,有时候我们需要把图片编码成base64字符串传输,记录一下工具类 import android.graphics.Bitmap; import android.graphics ...