![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ 模板
逗神大人
C++程序员,也会点Java,Kotlin, Swift,Python,Golang, C#, 但技术相对比较菜,用到啥就学啥,用不上的一会就忘了
展开
-
C++高级模板编程: 将tuple作为可变模板参数调用
需求描述有一个外部可变模板参数的接口,比如C++20的std::format需要将其封装成比较便捷的操作符调用方式,比如auto s = "{} {}" % T(a, b, c, ...);如何实现?需求分析首先这里需要一个T的可变模板参数函数,返回结果是一个固定类型的对象,不如就用标准库的 std::tuple吧然后还需要重载 %操作符template<typename Tuple>std::string operator%(std::string_view fmt,原创 2022-05-27 10:27:08 · 1151 阅读 · 0 评论 -
C++20 新功能concept的使用
使用C++20提供的concept关键字,引入概念,使得模板的使用更加高效、简洁与易用原创 2021-09-18 00:44:17 · 538 阅读 · 0 评论 -
C++笔记: 模拟实现C++11的智能指针
Shared Pointer#include <cstdint>#include <iostream>struct RefCount { std::size_t ref; std::size_t weak; RefCount(): ref(1), weak(0) {}};template <typename T>struct Ref: RefCount { T data; Ref(T d): RefCount(原创 2021-01-29 18:18:44 · 147 阅读 · 2 评论 -
C++小技巧: 集合(vector, list, map, set)的反向遍历
一般的正向集合遍历1. for/index/size模式for(int i = 0; i < collection.size(); ++i) { std::cout << collection[i] << std::endl;}弊端: 只适合std::vector这种可以通过下标随机O(1)时间访问的集合类型2. for/begin/end 模式for(auto it = collection.begin(); it != collection.end(); +原创 2020-09-24 15:58:01 · 12404 阅读 · 1 评论 -
C++模板技术之method_thunk, 使用场景: C++中类成员函数作为回调函数
在使用libev的ev++.h中的接口时,看到一些很实用的技术,其中就有本篇要介绍的method_thunk(注: 本篇博客仅作为学习笔记)在以往,我们使用了某些基于C语言的库时,需要用到回调函数, 比如pthread库。如果要在C++中使用这些库来绑定我们的某个类的成员函数作为回调时,我们通常会使用诸如class Some{public: void doSomethi原创 2017-12-28 11:36:09 · 953 阅读 · 0 评论 -
C++编程技巧之属性的使用
文章目录引入原理实践源码Repo引入作为一个喜欢偷懒的码农, 在开发C++的过程中经常遇到类属性的明明问题头疼 &amp;gt;_&amp;lt;既然是属性, 那常用的接口无非就是设置属性, 获取属性, 监听属性变化以及限定属性的合法值范围平常开发的时候, 基本都是一股脑的按流程走, 如:定义私有成员变量定义属性get方法定义属性set方法在set方法里里面去检验新值是否合法, 以及是否有变化等...原创 2019-02-15 12:24:33 · 472 阅读 · 0 评论 -
C++11 高级模板编程开发之优雅调用带有错误信息返回值的接口
前言在许多C语言的接口中, 使用返回错误码的形式的接口很是常见, 但是很多时候, 接口调用者只需要关心接口调用结果是否成功, 而选择忽略返回值, 那有没有什么比较优雅的方式来调用这些接口呢?C++11实现方式template <typename T>struct InvokeResult { using value_type = typename std::remov...原创 2019-03-11 14:14:57 · 442 阅读 · 0 评论