c++ 笔记二

1.可变参数和限制输入:

代码:不限制输入,返回+的总和

#include <iostream>
#include <filesystem>
#include <string>
#include <vector>template<class Type>
concept AddAble = requires(Type T1, Type T2) {{T1 + T2 }->std::convertible_to<Type>;
};template< AddAble... Args>
void Add(Args... arge) {using argeType = std::common_type_t<Args...>;argeType number  = (arge + ...);std::cout << " number is >>>" << number;
}
int main() {Add(123,788,888);Add(std::string {"dsafdf"},std::string{"ddddd"});return 0;
}

详解:

自动推断类型的方法:

在C++中,可以使用多种工具和特性来推断一个参数的类型。以下是一些常用的方法和工具:

auto 关键字: auto 关键字可以用于变量声明中,以自动推断类型。

auto x = 42;       // 推断 x 的类型为 int
auto y = 3.14;     // 推断 y 的类型为 double
auto z = x + y;    // 推断 z 的类型为 double

decltype 关键字: decltype 可以用于获取表达式的类型,而不实际计算该表达式。

int x = 42;
decltype(x) y = 43; // y 的类型是 int

函数模板和模板参数推断: 在函数模板中,参数类型可以自动推断。

template<typename T>
void printType(T t) {std::cout << "Type is: " << typeid(t).name() << std::endl;
}int main() {printType(42);     // T 被推断为 intprintType(3.14);   // T 被推断为 doublereturn 0;
}

std::common_type: 用于推断多个类型的公共类型。

std::common_type_t<int, double> result; // result 的类型是 double

std::invoke_result: 用于推断函数调用返回的类型。

int func(double);
using ResultType = std::invoke_result_t<decltype(func), double>; // ResultType 是 int

 C++20 Concepts: 概念可以用于约束模板参数,并能更清晰地表达类型要求。

template<typename T>
concept Addable = requires(T a, T b) {{ a + b } -> std::convertible_to<T>;
};template<Addable T>
void add(T a, T b) {std::cout << a + b << std::endl;
}

 std::remove_referencestd::remove_cv: 用于在模板元编程中获取类型的基本形式。

template<typename T>
void func(T&& param) {using Type = std::remove_reference_t<T>;// Type 是去除了引用的类型
}

std::common_with 和std::convertible_to在限制模版中经常使用,我们看一下他们的区别:

std::common_withstd::convertible_to 是C++20中引入的概念,用于约束模板参数类型。尽管它们看似相似,但它们的用途和语义有所不同。

std::common_with

std::common_with 概念用于检查两个类型是否有一个公共类型,即可以相互转换为一个共同的类型。具体来说,std::common_with<T, U> 检查以下条件:

  1. std::common_type_t<T, U> 存在。
  2. std::common_type_t<U, T> 存在。
  3. std::common_type_t<T, U>std::common_type_t<U, T> 是同一个类型。
  4. TU 都可以转换为 std::common_type_t<T, U>

简而言之,std::common_with 确保两个类型可以相互转换,并且这种转换是对称且一致的。

std::convertible_to

std::convertible_to 概念用于检查一个类型是否可以隐式转换为另一个类型。具体来说,std::convertible_to<T, U> 检查以下条件:

  1. std::is_convertible_v<T, U>true
  2. static_cast<U>(std::declval<T>()) 是一个有效的表达式,并且其结果可以被转换为 U

简而言之,std::convertible_to 确保一个类型可以隐式转换为另一个类型。

代码示例:

class Base
{
public:void Test() { };
};class Son:public Base
{
public:void printf() {std::cout << " -------------------------------- ";};
};class TestClass
{
public:void test() { }
};template<class T1,class T2>
requires std::convertible_to<T1,T2>void FuncConver(T1 arg1,T2 arg2) {}
template <class T1,class T2>
requires std::common_with<T1,T2>
void FuncTest(T1 agr1,T2 agr2) {agr2.printf();
}
int main() {Base ba;Son so;TestClass test {};FuncTest(ba,so);FuncConver(1,3434);// FuncConver(ba,so);
//	Add(123,788,888);
//	Add(std::string {"dsafdf"},std::string{"ddddd"});return 0;
}

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

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

相关文章

adb常用命令详解--提升开发效率利器

文章目录 文件管理截屏与录屏logcat 使用dumpsys 相关ps 相关am 相关pm 相关wm 相关setprop 设置属性input 相关adb connect 远程无线调试其它 本文首发地址 https://h89.cn/archives/281.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 博主 Linux 使用较多&#x…

04 翼型和机翼、尾翼几何选择

04 翼型和机翼、尾翼几何选择 4 -1 引言4-2 翼型的选择4-2-1 翼型的几何4-2-2 翼型的升力和阻力4-2-3 翼型选择与设计4-2-4 设计升力系数4-2-5 失速4-2-6 翼型厚度比4-2-7 关于翼型其他方面的考虑 4-3 机翼几何外形4-3-1 展弦比4-2-3 机翼后掠角4-3-3 机翼稍根比4-3-4 机翼扭转…

团结的力量:友情、互助与感恩

时间如白驹过隙&#xff0c;半载光阴转瞬即逝。回首过去的六个月&#xff0c;在CSDN平台上&#xff0c;我经历了无数的挑战和成长。在大厂和阿豪的帮助下&#xff0c;我的粉丝数终于突破了万大关。这不仅是我个人的成就&#xff0c;更是我们团结、互助和感恩精神的见证。 初识…

aardio实战篇) 下载微信公众号文章为pdf和html

首发地址&#xff1a; https://mp.weixin.qq.com/s/w6v3RhqN0hJlWYlqTzGCxA 前言 之前在PC微信逆向) 定位微信浏览器打开链接的call提过要写一个保存公众号历史文章的工具。这篇文章先写一个将文章保存成pdf和html的工具&#xff0c;后面再补充一个采集历史的工具&#xff0c…

HTTP协议版本历程

HTTP协议的发展历程 版本推出年份当前状态HTTP/0.91991年已过时HTTP/1.01996年已过时HTTP/1.11997年标准HTTP/2.02015年标准HTTP/3.02022年标准 HTTP/0.9 HTTP/0.9非常简单&#xff0c;并不涉及数据包传输&#xff0c;通过请求和响应的交换达成通信&#xff0c;请求由单行指…

SmartEDA、Multisim、Proteus大比拼:电路设计王者之争?

在电路设计领域&#xff0c;SmartEDA、Multisim和Proteus无疑是三款备受瞩目的软件工具。它们各自拥有独特的功能和优势&#xff0c;但在这场电路设计王者的竞争中&#xff0c;谁才是真正的领跑者&#xff1f;让我们深入探究这三款软件的异同&#xff0c;揭示它们各自的魅力所在…

小抄 20240611

1 不要总是问“什么项目靠谱”“什么行业有前途”&#xff0c;这些东西对普通人没有太大参考意义&#xff0c;每个看上去靠谱的行业&#xff0c;都有可能变得不靠谱&#xff0c;重要的是&#xff0c;让自己变得靠谱&#xff0c;人靠谱&#xff0c;干什么事都能靠谱。 2 普通人…

图像处理与视觉感知复习--图像特征描述图像生成

文章目录 角点&#xff08;关键点&#xff09;的特点图像分类的流程梯度方向直方图&#xff08;HOG&#xff09;流程平移、旋转和尺度特征&#xff08;SIFT&#xff09;流程常用的图像生成模型GAN的原理Diffusion Model的原理mAP计算方法 角点&#xff08;关键点&#xff09;的…

QY-22 低功耗墒情监测站 厂家直营 无线传输

产品概述 低功耗墒情监测站基于传感、无线通信、处理与控制等物联网技术的开发&#xff0c;利用传感技术&#xff0c;通过传感器测量土壤墒情&#xff0c;并使用物联网进行传输。无需专门的通信线路&#xff0c;在联网的状态下&#xff0c;数据可快速、主动的上报到云平台&…

Vue48-ref属性

一、需求&#xff1a;操作DOM元素 1-1、使用原生的id属性 不太好&#xff01; 1-2、使用 ref属性 原生HTML中&#xff0c;用id属性给元素打标识&#xff0c;vue里面用ref属性。 给哪个元素加了ref属性&#xff0c;vc实例对象就收集哪个元素&#xff01;&#xff01;&#xff0…

光流法大全

H-S光流法 https://blog.csdn.net/Jianwen_Jiang/article/details/79094864 https://blog.csdn.net/jpc20144055069/article/details/96475084 金字塔迭代&#xff08;Iterative Pyramidal&#xff09;LK光流算法 https://github.com/MichaelBeechan/orbslam2-with-…

HTML初体验

可参考jd.com官网&#xff0c;ctrlu查看当前页面源代码 找到你的项目&#xff0c;在项目中创建html类型的网页文件 标准的HTML正确书写格式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title&…

仅靠独立网站也能赚到100万,真的太牛了

你听说过 Photopea 吗&#xff1f;这是一个免费的类似 Photoshop 的图像编辑器。 这个项目&#xff1a; 每月1300万访问量每月150万用户使用小时每月10万美元的广告收入 Photopea 项目的天才创造者是 Ivan Kutskir。 令人惊讶的是&#xff0c;他独自处理了每日50万用户&…

Tomcat配置详解

文章目录 一、配置文件介绍配置文件日志文件 二、组件组件分层和分类核心组件Tomcat处理请求过程URL对应关系 三、部署java程序手动部署搭建博客状态页 四、常见配置详解tomcat端口号安全配置管理虚拟主机配置Context配置 四、Tomcat Nginx动静分离 一、配置文件介绍 配置好环…

区间DP——AcWing 282. 石子合并

区间DP 定义 区间 DP 是动态规划的一种特殊形式&#xff0c;主要是在一段区间上进行动态规划计算。 运用情况 通常用于解决涉及在一段区间内进行操作、计算最优值等问题。比如计算一个区间内的最大子段和、最小分割代价等。一些常见的场景包括合并操作、划分操作等在区间上…

夏季河湖防溺水新举措:青犀AI视频智能监控系统保障水域安全

近日一则新闻引起大众关注&#xff0c;有网友发布视频称&#xff0c;假期在逛西湖时&#xff0c;发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内&#xff0c;沿湖救生员成功将落水游客救到了岸边。 随着夏季的到来&#xff0c;雨水增多&#xff0c;各危险水域水位…

【镜像制作】制作k8s的yaml配置的备份镜像

文章目录 简介一.备份代码二.dockerfile代码三.cronjob配置 简介 通过shell脚本写一个定期备份k8syaml配置的镜像&#xff0c;然后通过cronjob来实现定期执行&#xff0c;将备份文件上传到ceph存储或者是存放到NAS存储上。 一.备份代码 通过kubectl导出yaml配置文件&#xff0c…

什么是服务器系统端口隐患?

对于服务器来说&#xff0c;首要保障稳定性和安全性。因此&#xff0c;我们仅需保证服务器最基本的功能即可&#xff0c;就像声卡都是默认禁止的。我们并不需要太多的功能&#xff0c;也不需要太多的端口支持。像一些不必要&#xff0c;而且风险较高的端口大可封掉。而一些必要…

如何下载GoldWave 6.80软件及详细安装步骤

GoldWave功能介绍&#xff1a; GoldWave是一款很强大多功能数字音频编辑软件&#xff0c;可以用来消除某些音乐里边的噪音&#xff0c;可以用来声音编缉、播放、录制和转换还是多功能。它的音频特效有很多种可供选择。 GoldWave音频编辑软件与Windows其它应用软件一样&#x…

在Git上,提交记录有误,修改commit方法

在GitLab上&#xff0c;如果你发现提交(commit)有误&#xff0c;可以采取以下几种方式来修正&#xff0c;具体选择哪种方法取决于你的具体情况和需求&#xff1a; 1. 修改最近一次提交&#xff08;Amend&#xff09; 如果你只是想修改最近一次提交的信息&#xff08;比如提交…