
模板
文章平均质量分 69
fpcc
行之苟有恒,久久自芬芳!
展开
-
跟我学C++高级篇——CRTP的高级应用
CRTP是一种静态多态的实现方法。说的直白一些就是在正常的认知中,子类继承的是父类,但是如果父类是一个模板类,此模板类中的模板参数是子类的这种特殊情况。CRTP在前面说过两次,如果有对此技术不清楚的可以查看一下“跟我学c++中级篇——CRTP”以及“显式this的应用”中都进行过分析说明。CRTP本身就是一种很小众的技术应用,而它的一些应用,可能应用范围更小,下面就一些细节进行分析,扩展一下CRTP的更多的应用场景,给大家提供一些应用上的思路。CRTP的应用,相对来说就是一种比较复杂的应用。在前面将其基础原创 2025-02-08 21:13:38 · 595 阅读 · 0 评论 -
c++外部模板
模板的优势估计很多人都知道,但是模板的劣势也有不少,其中,代码膨胀就是其中之一(其它还有不易理解、不易调试等)。上面的示例代码非常简单,但可以说明一个问题,在上一篇中提到过,c++的编译是以CPP为单元进行的,模板如果不使用就不会生成代码,那么如果在两个CPP文件中使用一样的数据类型会产生什么样的情况呢?比如上在这种情形,都是int类型,只是数据略有不同。答案是编译器肯定会生成两个完全相同的函数。原创 2024-06-05 17:42:44 · 441 阅读 · 1 评论 -
C++的萃取技术
在《模板类型的自动推导》中提到了c++是一门静态编译语言,不支持动态类型的获取,也就更不用说提供类似c#,Java等语言的反射机制。但是,没有类型获取的接口不代表没有这种实际的需求,那么怎么解决这种需求就得靠c++的大牛们来想办法啦。微软的MFC通过大量的定义宏来动态的生成各种类和对象。而这种方式恰恰又不是c++大牛们觉得舒适的方法,所以他们想到了模板。在模板中,提供了Traits(萃取)技术,什么是萃取呢?简单来说,就是能够获得目标对象的类型,并依此而实现此类型对应的功能。原创 2024-03-10 10:58:01 · 1025 阅读 · 2 评论 -
跟我学c++中级篇——静态多态
从比较正式的定义来说,在c++中,一般不会把特定多态或者宏多态称为多态,以方便和C语言区分,一般来说,静态多态指的就是模板的静态多态。其实很多的定义和概念并不是说有多么特别的技术在内,很重要的一点在于通过这些定义或概念来更好的理解实际应用中的应用。可以简单将其当成一种对实际应用的抽象,从某种角度了对知识体系的一种系统的归类总结。这是学习编程的另外一种经验,大家可以借鉴一下。原创 2024-02-14 23:53:39 · 575 阅读 · 2 评论 -
跟我学C++中级篇——函数模板的匹配
在本文会尝试着把函数的重载以及模板自动推导等方法结合起来,一起分析模板函数的匹配的方式和原则。在普通的函数重载和普通的模板函数中,都比较容易理解调用哪一类,但在一些较为少用或者复杂的情况下,可能会发现一些特别的情况。这篇文章会针对这些情况进行一些具体的分析,并尝试着把一些疑惑解答分析出来。开发的过程其实是一个思维抽象再实践的过程。这个过程只有一条正确的路,就是用最简单(或者说尽可能简单)的方式来实现功能。所有的编程技巧,其终极的目标只有一个,让功能实现变得容易和安全,让代码更容易维护。原创 2024-02-07 20:44:00 · 1348 阅读 · 0 评论 -
跟我学C++中级篇——common_type的应用
它的使用比较有意思:1、如果无模板参数,则无类型。即sizeof…(T) 为零,则无成员 type2、如果一个模板参数,则等同于这个类型(std::common_type::type),否则也是无type3、如果有两个模板参数,要找一个可退化到相同的类型,否则无type;如果有自定义物化,则使用该特化;另外对于一些the conditional operator的操作按照相关的标准定义来操作。同时C++20中的新定义参看相关的新标准。原创 2024-02-02 21:11:16 · 986 阅读 · 3 评论 -
跟我学C++编程中级篇——std::enable_if的使用
对于SFINAE(不清楚的可以翻一下以前的相关文章)开发者来说,std::enable_if是绕不开的一个小话题。在C++11至C++20间,其在模板的元编程中起到了重要的作用。不过在C++20后Cocepts可以实现更清晰更简单的方式。其实非常好理解,这个模板结构体的第一个参数是bool型,第二个默认是个void,就是说,第一个参数决定了是否启用第二个参数。这下就明白了吧。struct T {T(Floating) : m_type(float_t) {} // 错误:无法被重载。原创 2024-01-23 18:55:17 · 1851 阅读 · 0 评论 -
跟我学c++高级篇——静态反射实现之一
反射写起来非常头痛,一个是不知道如何说起更有系统性;另外一个就是哪种反射更有利于实际的应用。所以反射这个系列可能会是一个很长期的总结过程,大家不要着急,一定会把坑慢慢填好。原创 2023-11-26 12:38:57 · 1308 阅读 · 1 评论 -
跟我学c++中级篇——decay
对c++11中的std::decay的应用进行分析和说明原创 2022-11-29 12:05:09 · 1216 阅读 · 0 评论 -
C++11中bind的使用错误
写了一个非常简单的应用,如下:#include typedef struct__Data{ intd;}DataCB; template typenameT>class ICallBack{public: ICallBack(){} ~ICallBack(){}public:原创 2017-01-19 18:08:38 · 2940 阅读 · 0 评论 -
using和typedef区别
在普通的类型名定义时,理论上讲二者是没有区别的,标准上是这样说的:A typedef-name can also be introduced by analias-declaration. The identifier following the using keyword becomes atypedef-name and the optional attribute-specifier-s原创 2017-01-17 14:19:22 · 7358 阅读 · 0 评论