C++中几个技巧(有点诡异的那种)

RAII

这个太多例子了,不细说

公开Base的内容

#include <iostream>
using namespace std;struct Base
{Base(){container++;}
protected:int container = 0;
};struct Derived:public Base
{Derived(Base b):Base(b){}using Base::container;
};int main()
{Base a;cout<<Derived(a).container<<endl;
}

举个实际的例子

// Extracts a reference to the container from back_insert_iterator.
template <typename Container>
inline auto get_container(std::back_insert_iterator<Container> it)-> Container& {using base = std::back_insert_iterator<Container>;struct accessor : base {accessor(base b) : base(b) {}using base::container;};return *accessor(it).container;
}

对泛化类模板进行特化以达到编译期约束

template <typename T> struct is_char : std::false_type {};
template <> struct is_char<char> : std::true_type {}; 

对泛化类模板进行继承以达到编译期约束

struct compile_string {};
template <typename S>
struct is_compile_string : std::is_base_of<compile_string, S> {};

对返回值进行SFINAE达到编译期约束

#include <iostream>
#include <type_traits>template <typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
printValue(T value) {std::cout << "Integral value: " << value << std::endl;
}template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
printValue(T value) {std::cout << "Floating point value: " << value << std::endl;
}int main() {printValue(42);       // 调用第一个重载,输出:Integral value: 42printValue(3.14);     // 调用第二个重载,输出:Floating point value: 3.14printValue("hello");  // 不匹配任何重载,编译时不会产生错误return 0;
}

区分编译期与运行期

template <typename Char, typename InputIt, typename OutputIt>
constexpr auto copy_str(InputIt begin, InputIt end, OutputIt out)-> OutputIt {while (begin != end) *out++ = static_cast<Char>(*begin++);return out;
}template <typename Char, typename T, typename U,std::enable_if_t<std::is_same<remove_const_t<T>, U>::value&& is_char<U>::value>>
constexpr auto copy_str(T* begin, T* end, U* out) -> U* {if (is_constant_evaluated()) return copy_str<Char, T*, U*>(begin, end, out);auto size = to_unsigned(end - begin);if (size > 0) memcpy(out, begin, size * sizeof(U));return out + size;
}

对类模板进行调用达到接口约束

template <typename Char, typename Handler>
FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end,Handler&& handler) -> const Char* {struct id_adapter {Handler& handler;int arg_id;FMT_CONSTEXPR void on_auto() { arg_id = handler.on_arg_id(); }FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); }FMT_CONSTEXPR void on_name(basic_string_view<Char> id) {arg_id = handler.on_arg_id(id);}};++begin;if (begin == end) return handler.on_error("invalid format string"), end;if (*begin == '}') {handler.on_replacement_field(handler.on_arg_id(), begin);} else if (*begin == '{') {handler.on_text(begin, begin + 1);} else {auto adapter = id_adapter{handler, 0};

只是这一段,对于Handler的接口约束就有很多了,而且都是必须实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux x86 setup_arch代码注释

个人理解加查的资料&#xff0c;不保证正确&#xff0c;有不对可以评论 // 查找个人电脑相关固件占用的地址&#xff08;来自bootparam中的handler&#xff09; olpc_ofw_detect(); // 将 early_idts 设置到 idt_table 并应用 lidt&#xff0c;包含 asm_exc_debug asm_exc_in…

Zernike多项式法生成相位理论推导及图像引导实现原理

目录 引言 波前传感器 ​编辑 关于相位计算问题补充 关于结构图的修正 光束质量评价指标 Zernike多项式 ​编辑Zernike多项式法生成相位 光强分布求波前相位-GS 更快的迭代方法SPGD 基于Zernike模式的SPGD 引言 我们还是先从第一篇文献开始理解展开今天分享的一些重…

并查集(C++)

目录 一、并查集的原理二、并查集的实现路径压缩 三、并查集的应用结尾 一、并查集的原理 并查集的两个功能&#xff1a; 合并&#xff1a;合并两个不想联系的元素查询&#xff1a;判断两个元素是否在同一个组内 主要解决的是元素分组的问题。 例如&#xff1a;某班级要创建…

数据迁移怎么测,都有哪些步骤?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

gRPC - 分布式 gRPC 四种通信方式、三种代理方式(全代码演示)

目录 一、分布式 gRPC 开发 1.1、项目结构 & 前置说明 1.1.1、项目结构 1.1.2、protoc 必备依赖 1.1.3、推荐插件&#xff08;简化开发&#xff09; 1.1.4、protoc 生成 Java 代码说明 1.2、一元 RPC&#xff08;代理方式一&#xff1a;阻塞式 BlockingStub&#xff…

网络安全专家必备的20个操作系统

工欲善其事必先利其器&#xff0c;网络安全专家、道德黑客、蓝队和红队的“武器库”里通常都收藏着一堆自己偏爱的操作系统。 如果你是网络安全新手&#xff0c;面对五花八门的安全工具手足无措&#xff0c;那么选择合适的网络安全专用操作系统无疑是更为高效的做法&#xff0…

DFA算法在敏感词过滤的应用

相信大家对于游戏里聊天框的以下内容已经不陌生了 "我***"“你真牛*”“你是不是傻*” 一个垃圾的游戏环境是非常影响玩游戏的心情的&#xff0c;看到这些&#xff0c;就知道游戏已经帮我们屏蔽掉了那些屏蔽字了&#xff0c;对于玩游戏而言&#xff0c;心里会好受很…

D48|动态规划之编辑距离

583.两个字符串的删除操作 初始思路: 大概能想到定义dp数组为最少的删除次数 想不明白递归公式应该怎么推导 题解复盘&#xff1a; 第一种思路&#xff1a;dp[i][j]所需要删除元素的最少次数. 递归公式五部曲; 1)dp数组的定义&#xff1a; dp[i][j]&#xff1a;以i-1为结尾的…

力扣1944.队列中可以看到的人数--单调栈

思路&#xff1a; 由题知一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 &#xff0c;也就是说&#xff0c;在自己右边第一个比自己高的人后面的人就肯定看不到了那么只需要找到右边第一个比自己高的人与自己之间的所有满足要求的人就行了&#xff0…

JDBC数据库访问——数据库操作

与指定的数据库建立连接后&#xff0c;就可以使用JDBC提供的API对数据库进行操作&#xff0c;包括查询、新增、更新、删除等。 1.查询操作 和数据库建立连接后&#xff0c;对数据库表进行查询操作的步骤如下&#xff1a; ①创建statement对象 由已创建的Connection对象con调…

透明OLED屏:种类与技术特点

作为一名专注于OLED技术研发的工程师&#xff0c;同时在尼伽工作多年&#xff0c;有幸能够参与到透明OLED屏的研发过程中。透明OLED屏作为一种新型显示技术&#xff0c;以其独特的透明特性和优秀的画质表现&#xff0c;正逐渐在各个领域崭露头角。在这篇文章中&#xff0c;我将…

【考研】二战稳上了,能先去工作几个月再读研吗

这篇文章是抖音和b站上上传的同名视频的原文稿件&#xff0c;感兴趣的csdn用户可以关注我的抖音和b站账号&#xff08;GeekPower极客力量&#xff09;。同时这篇文章也为视频观众提供方便&#xff0c;可以更加冷静地分析和思考。文章同时在知乎发表。 又一年的考研初试结束了&…

GROUP_CONCAT报错解决

有如下表 其中awardee和awardee_unit都是保存的json类型的字符串, awardee是多个人员id, awardee_unit是部门的全路径 查询时要注意转换 需要将name拼接起来合并成一行,直接 GROUP_CONCAT 会报错 百度的大部分答案是修改数据库配置去掉严格模式,如果不方便修改数据库可以这样…

CSMM软件能力成熟度模型的申报条件

CSMM&#xff08;软件能力成熟度模型&#xff09;是中国软件行业的一个重要标准&#xff0c;用于评估和认证企业在软件开发和维护方面的能力。CSMM认证分为五个等级&#xff0c;从低到高分别是初始级、受管理级、稳健级、量化管理级和优化级。以下是各个等级的申报条件概述&…

使用Go语言的HTTP客户端库进行API调用

随着微服务架构和RESTful API的普及&#xff0c;API调用成为了日常开发中的常见任务。Go语言提供了多种工具和库来帮助开发者轻松地与API进行交互。本文将介绍如何使用Go语言的HTTP客户端库进行API调用。 在Go语言中&#xff0c;标准库中的net/http包提供了基本的HTTP客户端功…

linux 终端获取键值

tty pts终端下获取键值 ctrl c 或3秒自动退出。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <termios.h> #include <sys/ioctl.h> #include <linux/kd.h>…

2023春季李宏毅机器学习笔记 06 :Diffusion Model 原理剖析

资料 课程主页&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub&#xff1a;https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程&#xff1a;https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、想法概念 Q1&…

基于哈里斯鹰算法优化的Elman神经网络数据预测 - 附代码

基于哈里斯鹰算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于哈里斯鹰算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于哈里斯鹰优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

C++学习day--25 俄罗斯方块游戏图像化开发

项目分析 项目演示、项目分析 启动页面 启动页面&#xff1a; 分析&#xff1a; 开发环境搭建 1&#xff09;安装vc2010, 或其他vs版本 2&#xff09;安装easyX图形库 代码实现: # include <stdio.h> # include <graphics.h> void welcome(void) { initgraph(55…

鹿目标检测数据集VOC格式500张

鹿&#xff0c;一种优雅而神秘的哺乳动物&#xff0c;以其优美的外形和独特的生态习性而备受人们的喜爱。 鹿的体型通常中等&#xff0c;四肢细长&#xff0c;身体线条流畅。它们的头部较小&#xff0c;耳朵大而直立&#xff0c;眼睛明亮有神。鹿的毛色因品种而异&#xff0c;…