C++模板元编程
文章平均质量分 53
C++模板元编程相关知识
s.feng
计算机视觉,C++
展开
-
tuple在模板编程中的使用
tuple的实际使用。原创 2023-12-12 19:12:47 · 361 阅读 · 0 评论 -
编译期的可变长参数包
下面是c++14支持了序列生成。下面每一行代码要是研究明白啊。原创 2023-11-09 00:12:42 · 106 阅读 · 0 评论 -
非类型模板参数
除了日常用的typename以外,模板还有很多非类型模板参数。原创 2023-07-26 10:08:28 · 69 阅读 · 0 评论 -
cub中的ChainedPolicy
上面的设计可以达到目的,假如机器是80的arch,那么最终生效的就是Policy80, 好了目前为止又掌握了一个模板炫技的戏法。原创 2023-07-23 18:48:32 · 120 阅读 · 0 评论 -
类模板相关知识
这里会报错,所以为了使用偏特化的功能,我们最好给Enable 改名给 dummy, 而且给一个默认赋值void, 不用担心和后面偏特化有竞争,即使一样编译器也会优先选择偏特化版本, 不会报错。,没搞明白的一定要搞清楚,不然后面越来越迷糊。现在类模板又是一种新的实例化流程,因为类模板有偏特化,所以和函数还不太一样。可以看到,原模板也可以生成同样的实力,但是编译器优先选择符合的偏特化版本。之前的文章里我们分析过函数模板实例化的过程,可以参考。如果有两个一模一样的偏特化版本,那么就会编译报错。原创 2023-07-18 14:25:50 · 62 阅读 · 1 评论 -
模板类型推导
虽然是讲函数模板推导,但是借用类模板来导出今天的话题, 我这里写了一个类模板,可以看到T可以被偏特化为[T, T*, T&, T&&], 此外还有[const T, const T*, const T&, const T&&], 下面的代码可以改吧改吧验证这个想法,举这个例子是说,既然typename T可以偏特化这8种类型,那么是不是也可以推导出这么多类型?这里注意数组的推导类型,在引用里会有区别。最近在写代码的时候经常被类型推导搞晕,今天好好总结一下。所谓的类型推导只是针对于。原创 2023-07-16 23:03:29 · 335 阅读 · 0 评论 -
模板函数如何实现偏特化效果
从唬人角度上,感觉第一个更迷惑,第二写法就比较通俗易懂。第一种写法给人感觉就是运行时判断的味道,第二种一看就是编译期的处理。因人而异遇到框架能看明白就行。原创 2023-07-14 14:58:56 · 253 阅读 · 0 评论 -
变长类模板示例
【代码】变长类模板示例。原创 2023-06-07 00:31:20 · 65 阅读 · 0 评论 -
第七章、传值还是传引用
在模板中有传值和传引用两种方式,不过传引用又可以分为const和non-const两种方式,在一些源码中经常充斥着模板编程,如果对类型推导不熟悉,很多时候想当然的结果会有很大误差,下面具体来分析。在传值之前,我们首先熟悉以下字面常量的类型,比如“hello”的数据类型是const char[6], 这里的6是因为尾部有个结束符,所以长度为5+1。原创 2023-05-28 22:13:31 · 46 阅读 · 0 评论 -
false_type 和 true_type的使用
参考:https://blog.csdn.net/sunny_98_98/article/details/116136331。比葫芦画瓢先看看怎么使用,理解起来其实不难,但是基本模式要记住。原创 2023-05-21 12:26:35 · 155 阅读 · 0 评论 -
if constexpr说明
可以看到,和#ifdef, #else这种差不多,不过define是预编译阶段,而if constexpr有点像编译阶段define的效果。可以把if constexpr理解为编译时if,只有被选中的if constexpr分支才会被实例化。这样会编译错误,因为会出现int tmp=“abc”, 所以会报错。此外还有一种新的方式。原创 2023-03-12 18:02:46 · 220 阅读 · 0 评论 -
2. enable_if的使用场景
第二、强烈建议是constexpr来代替const, 因为constexpr更加能说明是在编译器做的相关操作,这个值是一个编译期就确定的。(Substitution failure is not anerror,中文直译即是“匹配失败不是错误”)实现的,SFINEA的意思是在实例化过程中,比如有三个模板,但凡能匹配到一个正确的,另外两个模板在实例化过程中即使报错,编译器也认为没问题。在元编程过程中,我们经常会使用enable_if这个特性,enable_if是基于C++中的。原创 2022-09-06 11:23:11 · 1167 阅读 · 0 评论 -
1.元函数与type_traits
这里的constexpr是C++11的关键字,表示这个函数可以在编译期被调用,如果去掉,即使是无副作用的函数,也无法在编译期使用。上面这段程序其实在编译的时候就会报错,因为这个函数有副作用,所以不可能是元函数,加上constexpr的话会在编译的时候报错。,所以编译期使用的必须是元函数,一种没有副作用(输入一样的话输出一样)的函数。下面就是一个元函数。在计算机里函数有可能会调用全局变量,所以即使参数一样,当全局变量发生变化时候,也会出现结果不一样。元函数这里可以认为和数学函数一样的定义一样,......原创 2022-07-21 11:25:02 · 302 阅读 · 0 评论