c++11的动态类型
c++17引入了any 和 variant,可以将任意数据类型统一用any或variant类型表示,在开发中还是能够带来很多便利的。在c++11版本中,可以用下面这个例子,仿照实现一个Any类型。
#include <iostream>
#include <stdexcept>
#include <memory>class UserData{
public:UserData(){}std::string operator()(){return m_name;}
private:std::string m_name="world";
};class Any
{
public:template<typename T>Any(const T& val) noexcept : content(new Holder<T>(val)) {}Any(const Any& other) noexcept : content(other.content ? other.content->Copy() : nullptr) {}Any(Any&& other) noexcept :content(std::move(other.content)) {}Any& operator=(const Any& other){if (this == &other)return *this;content.reset(other.content ? other.content->Copy() : nullptr);return *this;}template<typename T>T& get() const{if (content.get() == nullptr){throw std::exception_ptr();}if (typeid(T).hash_code() != content->TypeID()){throw std::bad_cast();}return static_cast<Holder<T>*>(content.get())->value;}std::string TypeName() const{if (content)return content->TypeName();return "";}size_t TypeID(){if (content)return content->TypeID();return 0;}
private:struct Base {virtual ~Base() {}virtual Base* Copy() const = 0;virtual size_t TypeID() const = 0;virtual const char* TypeName() const = 0;};template<typename T>struct Holder :public Base{Holder<T>() = delete;Holder<T>(const T& val) : value(val), typid(typeid(T).hash_code()), typname(typeid(T).name()) {}~Holder<T>() {}Base* Copy() const override { return new Holder<T>(value); }size_t TypeID() const override { return typid; }const char* TypeName() const override { return typname; }T value;size_t typid;const char* typname;};std::unique_ptr<Base> content;
};int main()
{int iVal = 10;Any param = iVal;int& iv = param.get<int>();iv = 100;std::cout<<param.TypeName()<<", val="<<param.get<int>()<<std::endl;std::string sVal="hello";param = sVal;std::cout<<param.TypeName()<<", val="<<param.get<std::string>()<<std::endl;double dVal = 101.21;Any paramd = dVal;param = paramd;std::cout<<param.TypeName()<<", val="<<param.get<double>()<<std::endl;UserData data;param = data;UserData& dt = param.get<UserData>();std::cout<<param.TypeName()<<", val="<<dt()<<std::endl;return 0;
}
相关文章:
c++11的动态类型
c17引入了any 和 variant,可以将任意数据类型统一用any或variant类型表示,在开发中还是能够带来很多便利的。在c11版本中,可以用下面这个例子,仿照实现一个Any类型。 #include <iostream> #include <stdexcept> #inc…...
付费会员渗透难,腾讯音乐的触顶挑战
腾讯音乐付费用户增长背后,月活跃用户数下滑3%,超级会员渗透率仅1.8%。 转载|原创新熵 作者丨晓伊 编辑丨蕨影 腾讯音乐此次营收同比正增长的到来,殊为不易。要知道,此前已连续四个季度出现营收同比下滑的态势。 11月12日&#x…...
内网安全隧道搭建-ngrok-frp-nps-sapp
1.ngrok 建立内网主机与公网跳板机的连接: 内网主机为客户机: 下载客户端执行 2.frp (1)以下为内网穿透端口转发 frp服务端配置: bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置…...
Load-Balanced-Online-OJ(负载均衡式在线OJ)
负载均衡式在线OJ 1. 项目介绍2. 项目说明4. 项目代码5. 项目演示 1. 项目介绍 2. 项目说明 4. 项目代码 5. 项目演示...
Postman之变量操作
系列文章目录 1.Postman之安装及汉化基本使用介绍 2.Postman之变量操作 3.Postman之数据提取 4.Postman之pm.test断言操作 5.Postman之newman Postman之变量操作 1.pm.globals全局变量2.pm.environment环境变量3.pm.collectionVariables集合变量4.pm.variables5.提取数据-设置变…...
查找字符串中某个字符返回字符位置
当然有正则表达式就非常简单,没有的话也不用担心,我们自己写算法完成这个功能. 早期的vs版本不支持vs,当然也可以下载boost来实现,关键还是不想下载,那么就自己写吧. 1.要求,查找字符串中同一个字符,并找出字符的位置. 2.根据字符位置,计算出对应的x,y坐标. 算法第一步,查找字…...
《数学物理学报》
作者指南 一、目的与范围 《数学物理学报》以刊登数学与物理科学的边缘学科中具有创造性的代表学科水平的科研成果为主的综合性学术刊物。其目的旨在向专业读者(研究生水平以上)提供数理学科领域的重要的、独创的成果。 二、投稿 要求文章内容具有创新…...
39页PDF | 毕马威_数据资产运营白皮书(限免下载)
一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性,提出了数据资产运营的“三要素”(组织与意识、流程与规范、平台与工具)和“四重奏”(数据资产盘点、评估、治理、共享)…...
K8s 一键部署 MongoDB 的 Replica-Set 和 MongoDB-Express
什么是 MongoDB 副本集? MongoDB 副本集(Replica-Set)是一个分布式数据库系统,它包含一个主节点和多个从节点。主节点负责处理所有写操作,从节点用于读取数据。当主节点发生故障时,从节点可以自动选举一个…...
2024小迪安全基础入门第四课
目录 Web应用&蜜罐系统&堡垒机运维&API内外接口&第三方拓展架构&部署影响 堡垒机的核心功能 堡垒机的优势 API的结构 Web应用&蜜罐系统&堡垒机运维&API内外接口&第三方拓展架构&部署影响 蜜罐(Honeypot)是…...
一文详解使用java easyexcel导出文件的几种情况
情况一:简单的导出指定类型文档,不要求格式 filePath-文件路径// 设置响应头response.setContentType("application/octet-stream");// 字符集处理,确保文件名的正确显示response.setHeader("Content-Disposition","…...
【蓝桥杯C/C++】深入解析I/O高效性能优化:std::ios::sync_with_stdio(false)
博客主页: [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 💯前言💯C 语言与 C 语言的输入输出对比1.1 C 语言的输入输出1.2 C 语言的输入输出 💯 std::ios::sync_with_stdio(false) 的作用与意义2.1 什么是 std::ios::sync_with_st…...
NUXT3学习日记四(路由中间件、导航守卫)
前言 在 Nuxt 3 中,中间件(Middleware)是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑,像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用,也可以只在特定页…...
数据科学与SQL:组距分组分析 | 区间分布问题
目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言,一个记录对应的指标值的绝对值,肯定落在所有指标值的绝对值的最小值和最大值构成的区间内,根据一定的算法&#x…...
odoo18中模型的常用字段类型
字段的公共属性: Char 字符类型,对应数据库中varchar类型,除了通用类型外接收另外两个参数: size: 字符长度,超出的长度将被截断 trim: 默认True,是否字段值应该被去空白。 Text 文本类型,对应数据库…...
【如何用更少的数据作出更好的决策】-gpt生成
如何用更少的数据作出更好的决策 用更少的数据作出更好的决策是一种能力的体现,需要结合有效的方法、严谨的逻辑以及对问题的深刻理解。以下是一些可以帮助你实现这一目标的策略: 明确目标 在收集和分析数据之前,先明确你的决策目标是什么…...
ara::com 与 AUTOSAR 元模型的关系总结
原文链接:AUTOSAR_EXP_ARAComAPI的7章笔记(6) 整体说明 先是表明此前解释 ara::com API 思想和机制时未涉及具体 AP 元模型清单部分,本章旨在阐明 ara::com 与相关元模型部分的关系,且是较高层次的基本理解性介绍&am…...
springboot整合hive
springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…...
浅谈 proxy
应用场景 Vue2采用的defineProperty去实现数据绑定,Vue3则改为Proxy,遇到了什么问题? - 在Vue2中不能检测数组和对象的变化 1. 无法检测 对象property 的添加或移除 var vm new Vue({data:{a:1} })// vm.a 是响应式的vm.b 2 // vm.b 是…...
Ansys Maxwell:SheetScan - 导入材料特性曲线
你好, 在这篇博文中,我展示了如何使用 Ansys Maxwell“SheetScan”工具导入材料特性数据集。在这篇博文中,我展示了如何导入复杂磁导率实部数据集以用于涡流(频率相关)求解器,并以 Ferroxcube 磁芯材料规格…...
效率革命:跳过java安装与配置,用快马平台秒级验证算法性能
效率革命:跳过Java安装与配置,用快马平台秒级验证算法性能 最近在优化一个数据处理模块时,我需要快速验证几种排序算法的性能差异。按照传统开发流程,至少要经历以下步骤: 下载并安装JDK,配置环境变量选择…...
Win10主机与Win7虚拟机共享文件夹超详细指南(VMware/虚拟机新手必看)
Win10主机与Win7虚拟机无缝共享文件夹全流程解析 刚接触虚拟机的用户经常会遇到一个棘手问题:如何在主机和虚拟机之间高效传输文件?复制粘贴受限、U盘来回插拔效率低下,而共享文件夹功能正是解决这一痛点的最佳方案。本文将手把手带你完成从零…...
不止System.Memory!OpenCVSharp依赖的这几个DLL报错,一个方法全搞定
深度解析OpenCVSharp依赖冲突:从System.Memory到通用解决方案 当你兴致勃勃地准备运行一个基于OpenCVSharp的计算机视觉项目时,突然弹出的"DLL加载失败"或"版本不匹配"错误信息就像一盆冷水浇灭了热情。System.Memory只是众多潜在问…...
TOAST UI Chart错误处理与调试终极指南:10个常见问题解决方案大全
TOAST UI Chart错误处理与调试终极指南:10个常见问题解决方案大全 【免费下载链接】tui.chart 🍞📊 Beautiful chart for data visualization. 项目地址: https://gitcode.com/gh_mirrors/tu/tui.chart TOAST UI Chart是一款功能强大的…...
图网络梯度计算与反向传播:自动微分技术的完整指南
图网络梯度计算与反向传播:自动微分技术的完整指南 【免费下载链接】graph_nets Build Graph Nets in Tensorflow 项目地址: https://gitcode.com/gh_mirrors/gr/graph_nets 在深度学习领域,图网络(Graph Networks)凭借其处…...
小米设备集成终极测试指南:确保HomeAssistant稳定运行的7个关键步骤
小米设备集成终极测试指南:确保HomeAssistant稳定运行的7个关键步骤 【免费下载链接】hass-xiaomi-miot Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices. 小米米家智能家居设备接入Hass集成 项目地…...
基于深度学习的FasterRCNN水下图像复原
项目概述:Waternet_FasterRCNN 本项目旨在结合深度学习技术进行水下图像的还原与分析,综合应用 WaterNet 和 Faster R-CNN 来完成以下功能: 水下图像还原:利用 WaterNet 修复和增强水下图像质量。色板检测与提取:通过 …...
医学影像3D可视化的技术革新:MRIcroGL如何重构临床诊断流程
医学影像3D可视化的技术革新:MRIcroGL如何重构临床诊断流程 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL 在医学影像分析…...
Qwen3.5-9B-AWQ-4bit操作系统概念学习与实验指导
Qwen3.5-9B-AWQ-4bit操作系统概念学习与实验指导 1. 当AI成为你的操作系统课助教 想象一下,凌晨两点你正在赶操作系统课程的作业,突然卡在进程调度算法上。这时候如果有个随时在线的助教,能清晰解释概念、提供实验思路,甚至给出…...
多功能 PEG 衍生物 Ergosterol-PEG-MAL,Ergosterol-PEG-Maleimide详解
试剂基本信息中文名称:麦角固醇-聚乙二醇-马来酰亚胺英文名称:Ergosterol-PEG-MAL,Ergosterol-PEG-Maleimide分子量:0.4k,0.6k,1k,2k,3.4k,5k,10k,…...
