当前位置: 首页 > news >正文

2402C++,C++26包索引

原文

新的索引式访问方式

当前,要定义一个参数包变量,需要借助std::tuple;要索引式访问参数包元素,需要借助std::getstd::tuple_element;要解包,需要借助std::apply.
而借助这些新的特性,以后可直接写出此代码:

template <typename... Ts>
class Tuple {
public:constexpr Tuple(Ts&&... ts): elems(std::forward<Ts>(ts))...{ }template <size_t I>auto get() const&-> Ts...[I] const& {return elems...[I]; //包索引}
private:Ts... elems; //可变包
};
template <size_t I, typename... Ts>
struct std::tuple_element<I,Tuple<Ts...>>{using type = Ts...[I]; //包索引
};
int main() {Tuple<int, char> tup(1, 'c');return tup.get<0>();
}

该实现元组的方式借助了包索引变量包(尚未入标准),它比ReflectionforC++中介绍的反射方式还要直接了当,是最简洁的实现方式.

语法解析

深思熟虑过后,最终包索引的语法为:

包名 ... [常表达式]

这样可直接访问指定位置的参数包,示例:

template <typename... T>
constexpr auto first_plus_last(T... values) -> T...[0] {return T...[0](values...[0] + values...[sizeof...(values)-1]);
}
static_assert(first_plus_last(1,2,10) ==11 );

T...[N]针对的是类型,而values...[N]针对的是.参数包的首位元素末位元素,返回一个编译期常量值.

尚未完善
虽然包索引已进C++,但还未完善.更多见原文!

相关文章:

  • C#,数值计算,矩阵的行列式(Determinant)、伴随矩阵(Adjoint)与逆矩阵(Inverse)的算法与源代码
  • ES实战--wildcard正则匹配exists过滤字段是否存在
  • JavaScript:JSON、三种包装类
  • 在SpringBoot中@PathVariable与@RequestParam的区别
  • IO线程-day1
  • compile error ESP32cam.h no such file or directory
  • sql常用语句小结
  • 服务器防火墙设置教程
  • SQL查询数据是否存在
  • 5G网络eMBB、uRLLC、mMTC
  • 【手写数据库toadb】数据字典缓存的实现方法和接口分享,面向对象设计思想,接口单一化
  • Sentinel注解@SentinelResource详解
  • springboot197基于springboot的毕业设计系统的开发
  • LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)
  • MongoDB聚合操作符:$acos
  • SegmentFault for Android 3.0 发布
  • ComponentOne 2017 V2版本正式发布
  • css选择器
  • echarts花样作死的坑
  • Github访问慢解决办法
  • GitUp, 你不可错过的秀外慧中的git工具
  • Javascript Math对象和Date对象常用方法详解
  • ng6--错误信息小结(持续更新)
  • node入门
  • pdf文件如何在线转换为jpg图片
  • PHP的Ev教程三(Periodic watcher)
  • Python 基础起步 (十) 什么叫函数?
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer之创建显式事务
  • web标准化(下)
  • Web设计流程优化:网页效果图设计新思路
  • 给初学者:JavaScript 中数组操作注意点
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 利用jquery编写加法运算验证码
  • 说说动画卡顿的解决方案
  • 最近的计划
  • No resource identifier found for attribute,RxJava之zip操作符
  • HanLP分词命名实体提取详解
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​如何在iOS手机上查看应用日志
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)二分查找 超详细
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (三) diretfbrc详解
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)Sql Server 保留几位小数的两种做法
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core 中插件式开发实现
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Standard 的管理策略
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献