C++ 函数:在相同类型参数情况下返回不同类型值

首先重载是不能做到的,相同函数参数类型前提下,不可能返回不同类型的返回值,但是想弄一些歪招实现这个效果

模板不算,因为模板会根据不同的输入参数类型生成不同的函数,就不是调用相同的函数了

1、使用 void* 的返回值

然后自己强制转类型,类似 malloc

void* test(int i);

2、类似使用工厂模式

使用虚函数

class base {
public:virtual void print(){cout << "base\n";}
};class father : public base {
public:void print(){cout << "father\n";}
};base* test(int i) {if (i == 1)return new father();elsereturn new base();
}

3、使用 operator TypeName()

operator TypeName() 可以把一种类当另外一个类型用

#include <iostream>
using namespace std;class Foo {
public:operator bool() const {return true;}operator int() const {return 2;}operator string() const {return "string";}
};int main(int argc, const char* argv[]) {Foo foo1;bool b = foo1;int i = foo1;string s = foo1;cout << b << endl;cout << i << endl;cout << s << endl;return 0;
}
/*
* 输出
1
2
string
*/

基于此原理,我们可以制作一个 test 函数,实现文章开头提到的功能

#include <iostream>
using namespace std;class Foo {
public:Foo(bool b1, int i1, string s1) {b = b1;i = i1;s = s1;}operator bool() const {return b;}operator int() const {return i;}operator string() const {return s;}bool b;int i;string s;
};
Foo test(bool b, int i, string s) {return Foo(b, i, s);
}
int main(int argc, const char* argv[]) {bool b = test(1, 2, "3");int i = test(1, 2, "3");string s = test(1, 2, "3");cout << b << endl;cout << i << endl;cout << s << endl;return 0;
}
/*
* 输出
1
2
3
*/

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

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

相关文章

RabbitMQ-死信交换机和死信队列

1. 简介 1.1 DLX简介 DLX: Dead-Letter-Exchange 死信交换器&#xff0c;死信邮箱 当消息成为Dead message后&#xff0c;可以被重新发送到另一个交换机&#xff0c;这个交换机就是DLX。 如下图所示&#xff1a; 其实死信队列就是一个普通的交换机&#xff0c;有些队列的消息…

初步认识 Web Components 并实现一个按钮

目录 1.Web Components 基本概念 1.1 三个场景 1.2 是什么 2.使用 Custom Elements 实现一个按钮 2.1 概念介绍 2.1.1 Shadow DOM 2.1.2 Element.attachShadow() 2.1.3 在组件中 使用 Shadow DOM 基本步骤 2.1.4 attributeChangedCallback 2.1.5 get observedAttribu…

LeetCode 2558. 从数量最多的堆取走礼物

【LetMeFly】2558.从数量最多的堆取走礼物 力扣题目链接&#xff1a;https://leetcode.cn/problems/take-gifts-from-the-richest-pile/ 给你一个整数数组 gifts &#xff0c;表示各堆礼物的数量。每一秒&#xff0c;你需要执行以下操作&#xff1a; 选择礼物数量最多的那一…

Go 并发编程

文章目录 用 goroutine 和通道实现并发用 sync 实现并发互斥锁sync.Once 结构体同步等待组 zync.WaitGroup竞态检测器 应用自增整数生成器并发消息发送器多路复合计算器用 select 关键字创建多通道监听器多路复合计算器超时处理 用无缓冲通道阻塞主线程用筛法求素数创建随机数生…

Spring Security漏洞防护—HttpFirewall和 HTTPS

一、HttpFirewall Spring Security有几个领域&#xff0c;你所定义的 pattern 会针对传入的请求进行测试&#xff0c;以决定应该如何处理请求。这发生在 FilterChainProxy 决定请求应该通过哪个过滤链时&#xff0c;以及 FilterSecurityInterceptor 决定哪些安全约束适用于请求…

阿里云/腾讯云国际站代理:国际腾讯云的优势

国际腾讯云具有以下优势&#xff1a; 1. 全球覆盖&#xff1a;腾讯云在全球拥有30个区域&#xff0c;覆盖6个大洲&#xff0c;能够提供全球范围的云服务&#xff0c;满足不同地区用户的需求。 2. 大规模网络&#xff1a;腾讯云拥有庞大的全球网络&#xff0c;包括多个高速骨干…

Go 语言操作 MongoDb

文章目录 连接数据库插入数据库插入一条数据批量插入数据 查询数据用 BSON 进行复合查询聚合查询 更新数据删除数据 连接数据库 package mainimport ("context""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options"…

计算机毕设 flink大数据淘宝用户行为数据实时分析与可视化

文章目录 0 前言1、环境准备1.1 flink 下载相关 jar 包1.2 生成 kafka 数据1.3 开发前的三个小 tip 2、flink-sql 客户端编写运行 sql2.1 创建 kafka 数据源表2.2 指标统计&#xff1a;每小时成交量2.2.1 创建 es 结果表&#xff0c; 存放每小时的成交量2.2.2 执行 sql &#x…

Servlet 与Spring对比!

前言&#xff1a; Spring相关的框架知识&#xff0c;算是目前公司在用的前沿知识了&#xff0c;很重要&#xff01;&#xff01; 那么以Spring为基础的框架有几个&#xff1f; 以Spring为基础的框架包括若干模块&#xff0c;其中主要的有Spring Framework、Spring Boot、Spring…

十七、模型构建器(ModelBuilder)快速提取城市建成区——批量将夜光数据投影、转为整型(基于参考比较法)

一、前言 本文以参考比较法提取城市建成区为例,详细介绍如何使用模型构建器(ModelBuilder)提高效率,特别说明一下,模型构建器构建的模型是可以保存成为工具,日后需要使用的时候可以直接使用工具不用重复构建,因为模型构建器构建的工作流如果不保存,下次就不能使用,需…

Mybatis基础

文章目录 Mybatis基础XML语言概述使用Mybatis配置Mybatis增删改查复杂查询事务操作动态 SQLifchoose、when、otherwise 缓存机制注解开发 Mybatis基础 虽然我们能够通过JDBC来连接和操作数据库&#xff0c;但是哪怕只是完成一个SQL语句的执行&#xff0c;都需要编写大量的代码…

【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

在人工智能爆火的今天&#xff0c;深度学习被广泛应用于各个领域。深度学习的模型训练离不开大量的样本库。我之前分享过【Python爬虫】批量爬取网页的图片&制作数据集&#xff0c;今天跟大家分享一下如何使用OpenCV库对视频进行抽帧&#xff0c;从而增加样本图片的数量。正…

Operator开发之operator-sdk入门

1 operator-sdk 除了kubebuilder&#xff0c;operator-sdk是另一个常用的用于开发Operator的框架&#xff0c;不过operator-sdk还是基于kubebuilder&#xff0c;因此&#xff0c;通常还是建议使用kubebuilder开发Operator。 2 环境准备 跟kubebuilder类似&#xff0c;需要安…

Tensorflow2 中模型训练标签顺序和预测结果标签顺序不一致问题解决办法

本篇文章将详细介绍Tensorflow2.x中模型训练标签顺序和预测结果标签顺序不一致问题&#xff0c;这个问题如果考虑不周&#xff0c;或者标签顺序没有控制好的情况下会出现预测结果精度极其不准确的情况。 训练数据集的结构&#xff1a;数据集有超过10的类别数&#xff0c;这里包…

【Java 进阶篇】Java HTTP 请求消息详解

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的应用层协议&#xff0c;广泛用于构建互联网应用。在Java中&#xff0c;我们经常需要发送HTTP请求来与远程服务器进行通信。本文将详细介绍Java中HTTP请求消息的各个部分&#xff0c;包括请求行、…

shouldComponentUpdate 是做什么的?

目录 前言 生命周期函数 shouldComponentUpdate 的写法和用法 代码 事件和API 优缺点 方法 总结 理论 结论 shouldComponentUpdate 是 React 类组件中的一个生命周期方法&#xff0c;用于决定一个组件的 props 或 state 发生变化时是否应该重新渲染。默认情况下&…

什么是离岸金融 (OFFSHORE FINANCE)

什么是离岸金融 离岸金融&#xff08;Offshore Finance&#xff09;是指在国外或离岸地区开设金融账户、进行金融交易或管理金融资产的金融实践。这通常涉及将资金、投资、银行账户或金融交易放置在国外的特殊地区或国家&#xff0c;以获得各种金融和税收优惠。离岸金融的目的…

设计模式--7个原则

单一职责原则&#xff1a;一个类负责一项职责。 里氏替换原则&#xff1a;继承与派生的规则。 依赖倒置原则&#xff1a;高层模块不应该依赖基层模块&#xff0c;二者都应该依赖其抽象&#xff1b;抽象不应该依赖细节&#xff1b;细节应该依赖抽象。即针对接口编程&#xff0…

Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)

目录 一、概述 二、具体配置如下&#xff1a; 一、概述 DHCP &#xff1a;动态主机设置协议&#xff08;英语&#xff1a;Dynamic Host Configuration Protocol&#xff0c;DHCP&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&…

公司电脑如何限制安装软件

公司电脑如何限制安装软件 安企神终端管理系统下载使用 在企业环境中&#xff0c;电脑已经成为企业中必不可少的办公工具&#xff0c;确保员工的生产力和公司的信息安全是至关重要的。为了实现这一目标&#xff0c;公司可能会限制员工在某些情况下安装软件或者由管理员来为终…