![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++模板技术
文章平均质量分 52
炼气散人
等儿子高考后,或许会回来
展开
-
C++ 转换成 JSON
经常有朋友问我如何将C++对象转换成JSON格式字符串。我的回答通常是CppCMS中的json::value. 我也写过一篇文章介绍该技术。但是最近有些不同的想法。因为用到一个vector > 数据结构,json::value不支持这个模板特化。同时也发现json::value的设计思想是将所有的c++对象存储在std::map中,然后再导出为json字符串。但是在我开发的和看到的很多web se原创 2012-09-08 17:15:21 · 21181 阅读 · 0 评论 -
模板实参推断
定义:从函数实参确定模板实参的类型和值的过程叫做模板实参推断 《C++ Primer 4th》举例 template//模板类型形参int compare(const Glorp& v1,const Glorp& v2)//函数形参{ if(v1 { return -1; } if(v2 { return 1; } return 0;}int _tmain(int argc,原创 2006-08-20 21:12:00 · 5297 阅读 · 0 评论 -
c++模板元编程一:基本概念
1 基本概念1.1 meta program 元程序可以用meta program生成object program, 也可以object program作为数据看待,从而组装出更大的object program 元程序是处理程序的程序,如大家熟悉的编译器、解释器、类型检查器、定理证明器、程序生成器、转换系统和程序分析器等等1.2 object program 目标程序目标程序,又称为“目的程序”,原创 2015-04-05 16:24:00 · 2550 阅读 · 0 评论 -
c++模板元编程四:IF语句编译时运行
2.3 if 替代将if语句放在编译期执行,可以用模板特化的方式实现。下面是调用代码:// test ifcout << "test if" << endl;If::Run();输出结果为:test ifit's false模板类的实现如下:templateclass If {public: static inline void Run() { cout << "it's原创 2015-04-05 16:41:39 · 3904 阅读 · 0 评论 -
c++模板元编程五:switch/case语句编译时运行
2.4 switch/case 替代现在模拟switch/case语句,不过也是在编译期运行。先看调用代码和输出结果// test casecout << "test case" << endl;Case::Run();test casecase 2实现代码很简单,还是模板特化templateclass Case {public: static inline void Run()原创 2015-04-05 20:55:29 · 3827 阅读 · 0 评论 -
c++模板元编程二:用enum做数值计算
2.1 用enum做数值计算下面两篇文章都介绍了模板元编程,enum是其最重要的基本工具 http://www.codeproject.com/Articles/3743/A-gentle-introduction-to-Template-Metaprogramming https://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSemin原创 2015-04-05 16:26:40 · 4420 阅读 · 0 评论 -
c++模板元编程三:循环展开
2.2 loop unrolling 循环展开前面enum一节介绍的是和template联合,引发编译器递归的奇妙作用。template本身无需enum配合也可以达到递归的效果。// test template recursive for loop unrolling cout << "test 2: template recursive for loop unrolling" << en原创 2015-04-05 16:29:05 · 6449 阅读 · 0 评论 -
c++模板元编程七:类型判断的traits类
2 用于判断类型的traits类is_void类可以判断模板参数的类型,使用很简单,注意,也可以直接使用::value。cout ::type::value << endl;cout ::type::value << endl;但是实现很有趣,特化居然可以用来继承不同的类。这里没有去找clang++实现代码,用boost代码代替吧。template struct is_void : publ原创 2015-04-06 22:11:34 · 3722 阅读 · 0 评论 -
c++模板元编程六:integral_constant 类
1 integral_constant类这个类是所有traits类的基类,分别提供了以下功能:value_type 表示值的类型value表示值type 表示自己, 因此可以用::type::value来获取值true_type和false_type两个特化类用来表示bool值类型的traits,很多traits类都需要继承它们下面的代码分别来自C++11和Boost,略有差别:C++11包含va原创 2015-04-06 18:23:30 · 14685 阅读 · 0 评论