2401d,讨论d串滑动参数
原文
因为对编译时执行的i串
的兴趣,我一直在考虑搞个通用用例
,而不是相关i串
的用例.
滑动模板参数
请考虑以下模板:
void pluto(string s)()
{pragma(msg, s);
}
void test()
{pluto!"hello"();
}
因为s
是编译时参数,这编译,而pragma(msg,s)
期望s
为编译时值.
void pluto()(string s)
{pragma(msg, s);
}
void test()
{pluto("hello");
}
这无法编译,因为即使它是内联
的,s
也是编译时不可访问的运行时参数
.在此内联
没用,因为内联
是在CTFE
和分析
语义后进行的.
这些示例说明了编译时参数和运行时参数
间的区别.
为了说明,生成元素元组
:
alias AliasSeq(T...) = T;
及接受元组
的函数参数列表
:
void func(Args...)(Args args)
{
}
但注意,args
是运行时参数.表明,它无法用元组
拆分参数元组
为编译时
元组和运行时
元组,类似如下:
void pluto(Args...)(Args args)
{exec!(args[0])(args[1 .. args.length]);
}
这是DIP1036e
遇见的问题
.它聪明
的是让编译器(因为它不能通过元编程
完成)取第一个参数
,并用作模板
挂名值的编译时参数
.
然后,该参数
类型,是个把值编码
为可编程提取并编译时处理
的类型的模板
.
尴尬
在它只在i串
上,而不是通用
功能,再加上插入挂名参数
到参数列表
中,只为了可提取它们的类型
.
因此,该提案
描述了从运行时
的表达式元组
创建编译时参数
的语言能力
.
因为缺乏更好术语
,我叫它"滑动模板参数"
.
考虑一个模板函数
:
void pluto(string s, Args...)(Args args)
{pragma(msg, s);
}
void exec()
{pluto!"hello"(1,2,3);
}
现在有效.但如下无法编译
:
pluto("hello",1,2,3);
因为没有s参数
.
因此,编译器可滑动参数
到左侧
,而不是发出编译错误
,因此把第一个参数
移动到编译时参数列表
中.然后,调用
就会编译.
规则类似:
1
.该函数是个带可变运行时参数列表
的模板
2
.编译时参数是N个值
参数序列,加可变类型参数
.
3
.值参数
没有默认值
4
.模板
调用中未提供编译时参数
5
.最左边的N个
运行时参数与编译时参数
匹配,并从运行时参数列表
中删除
6
.如果它们匹配,则重写
模板实例化
来反映
这一点
7
.然后正常编译
然后,滑动模板
可成为一个通用设施
.有趣的结果
是,它开辟了一类全新的函数
,现在可对最左边
的参数CTFE
计算.
总之,这是个好主意
,但建议的语法
有点过于特化
,受到任意限制
,且行为
可能是意想不到
的,应该选入
.
也许可这样做:
void pluto(string s, Args...)(enum string x = s, Args args){
}
也即,可在函数参数列表
中使用枚举
,且必须默认
初化它们.即此参数
总是需要
有该值.
然后,在编译时计算
与枚举
参数匹配的参数,并匹配
初化器.
我昨天开始研究1036e
模板的替代机制
.我提到了这一点.
可在调用点
传递UDA
,并可在模板
函数中通过__traits(getAttributes,parameter)
访问它.
i"$ident$(expr)$(ident:format)${1:format}"
//变为:
@IExpression("ident")
ident,
@IExpression("expr")
expr,
@IExpression("ident")
@IFormat("format")
ident,
@IFormat("format")
@IPosition(1)
IPosition.init
这将是一个通用语言功能
.
string username, password;
getopt(@description("My program")@description("Second line")commandsInfo,@description("My programs help info")@flag("help") @flag("h") helpInfo,@description("The username to connect with")@flag("username") @flag("u") username,@description("The password to connect with")@flag("password") @flag("p") password
);
我已模拟了getopt
,唯一额外的模板用法
是formattedRead
.这是一个通用功能,串插值
也可绑定它.
这是个可行的方法
.但仍没有格式串
(writef
).
如果用它来实现插值元组
,我会让第一个参数
类型是
struct Interpolation {immutable string[] parts;
}
因此编译器
会这样:
void foo(Interpolation interp, Args...)(Args args) {...}
void main()
{string name = "Steve";int age = 42;foo(i"Hello, $name, I see you are $age years old.");//相当于:foo!(Interpolation(["Hello, ", "name", ", I see you are ", "age", " years old."]))(name, age);
}
按参数
出现的顺序传递参数
仍有价值.如,这禁止带多个i串
的函数.但也许没关系.
另一个有趣
的发展是,也可在运行时
取串字面数据(喜欢或同意
运行时处理串字面数据
时):
void writeln(Args...)(Interpolation interp, Args args)
{assert(interp.parts.length == args.length * 2 + 1);write(interp.parts[0]); //总是是前导串;static foreach(i; 0 .. args.length)write(args[i], interp.parts[(i+1)*2]);writeln();
}
我不认为这比DIP1036e
或DIP1027
简单.简单的转换就是简单的转换
.当然,编译时
传递格式串
的混合DIP1027
仍不可行.
但会稍微不那么臃肿.
如果该机制
是让它越过终点线
的原因,我可妥协.
这是可实现
和玩的东西吗?
这似乎有可能
破坏代码:
void foo(int x, Args...)(Args args) {
}
void foo(Args...)(Args args) {
}
foo(1, 2, 3); //这叫今天,第二个是
所以我会听从蒂蒙
的建议,也许确实需要明确选入
.
-史蒂夫
一个更现实
示例:
writefln("blah %d", 1)
因为writefln
(和format
)有串模板格式参数
版本.
即使选入,仍会决定(或抛
歧义错误)来匹配
重载.
-史蒂夫
相关文章:
2401d,讨论d串滑动参数
原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…...
etcd官方docker镜像及dockerfile问题处理
解决下我之前etcd使用docker镜像启动的坑 1、问题镜像docker-file: 这个dockerfile看着看不出来问题,但如果有人真的执行我之前两篇文章的文件,就会有问题,什么问题呢,无法连接到etcd,由于我是刚装上docker,排查了一圈,包括docker网络及是否是本地docker的网络问题,…...
2023 IoTDB Summit:天谋科技高级开发工程师苏宇荣《汇其流:如何用 IoTDB 流处理框架玩转端边云融合》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…...
Pygame程序的屏幕显示
不同对象的绘制与显示过程 在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时,可以使用不同的绘制方…...
LVGL的List控件的触摸按键和实体按键的处理
在LVGL的List控件使用过程中,虽然通过触摸按键选择item,但是有些场景需要实体按键选取item,但是LVGL 的V8.3中没有像Emwin那样有函数选择list item的函数。LVGL中List引入了Group的概念,把列表项都添加到同一个group中。然后通过更…...
数据结构 模拟实现二叉树(孩子表示法)
目录 一、二叉树的简单概念 (1)关于树的一些概念 (2)二叉树的一些概念及性质 定义二叉树的代码: 二、二叉树的方法实现 (1)createTree (2)preOrder (…...
Android14之解决刷机报错:Can not load Android system. Your data may be corrupt(一百七十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
二阶贝塞尔曲线生成弧线
概述 本文分享一个二阶贝塞尔曲线曲线生成弧线的算法。 效果 实现 1. 封装方法 class ArcLine {constructor(from, to, num 100) {this.from from;this.to to;this.num num;return this.getPointList();}getPointList() {const { from, to } thisconst ctrlPoint thi…...
FilterQuery过滤查询
ES中的查询操作分为两种:查询和过滤。查询即是之前提到的query查询,它默认会计算每个返回文档的得分,然后根据得分排序。而过滤只会筛选出符合条件的文档,并不计算得分,并且可以缓冲记录。所以我们在大范围筛选数据时&…...
java多线程(并发)夯实之路-线程池深入浅出
线程池 Thread Pool:线程池,存放可以重复使用的线程(消费者) Blocking Queue:阻塞队列,存放等待执行的任务(生产者) poll方法(有时限地获取任务)相对take注…...
数据库-列的类型-字符串char类型
char 和 varchar 类型 char 类型懂得都懂就是固定的字符串类型 char (maxLen) 例如 char(5) 这个长度为5 但插入数据‘a’时 是5 插入abc 也是5 即使插满固定 就像C/C语言里 char 字符数组一样 char str[64]; maxLen255 哈哈最多有255个字符多了我认为你是错误 varchar…...
大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章
第二十一章:数学 原文:21. Math 译者:飞龙 协议:CC BY-NC-SA 4.0 Math对象用作多个数学函数的命名空间。本章提供了一个概述。 数学属性 Math的属性如下: Math.E 欧拉常数(e) Math.LN2 2 …...
ICMP协议
ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。 一、ICMP基本概念 1、ICMP协议 ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是…...
环信服务端下载消息文件---菜鸟教程
前言 在服务端,下载消息文件是一个重要的功能。它允许您从服务器端获取并保存聊天消息、文件等数据,以便在本地进行进一步的处理和分析。本指南将指导您完成环信服务端下载消息文件的步骤。 环信服务端下载消息文件是指在环信服务端上,通过调…...
创建型模式 | 建造者模式
一、建造者模式 1、原理 建造者模式又叫生成器模式,是一种对象的构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。创建者模式是一步一步创建一个复杂的对象…...
MVC设计模式
在当今的软件开发领域,MVC(Model-View-Controller)设计模式已经成为了一种广泛使用的架构模式。它为应用程序提供了一种结构化的方法,将数据、用户界面和业务逻辑分开,从而使得应用程序更易于维护、扩展和重用。 一、…...
WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir 错误解决
[TOC](WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir 错误解决) 1. 错误信息 <3>WSL (2103) ERROR: CreateProcessEntryCommon:493: chdir(/mnt/d/Program Files/PowerShell/7) failed 52. 解决方法 wsl --shutdownwslrefer: https://github.com/microsoft/…...
【二、自动化测试】为什么要做自动化测试?哪种项目适合做自动化?
自动化测试是一种软件测试方法,通过编写和使用自动化脚本和工具,以自动执行测试用例并生成结果。 自动化旨在替代手动测试过程,提高测试效率和准确性。 自动化测试可以覆盖多种测试类型,包括功能测试、性能测试、安全测试等&…...
用ChatGPT来造一个ChatGPT:计算机领域智能问答系统实践(2)
在PHP语言中,你可以使用MySQL数据库来存储知识库,并使用PHP来实现系统的逻辑。以下是一个简单的示例: 创建数据库表: 首先,创建一个名为 computer_knowledge 的表来存储计算机知识。可以使用以下SQL语句:…...
Ubuntu开机自动挂载硬盘
前言: 因为我的电脑是WIN10 Ubuntu18.04双系统,且两个系统都装在C盘上,而D盘作为数据和代码存储盘,经常会开机就被访问,例如上一次关机前用VS Code访问D盘代码,然后下一次开机的时候打开VSCode发现打不开…...
vue3基础:单文件组件介绍
介绍 Vue 的单文件组件 (即 *.vue 文件,简称 SFC,全称是single file component) 是一种特殊的文件格式,使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例: <script> export def…...
OCR字符识别:开始批量识别身份证信息
身份证信息批量识别OCR是一项解决方案,它能够将身份证照片打包成zip格式或通过URL地址进行提交,并能够识别照片中的文本信息。最终,用户可以将识别结果生成为excel文件进行下载。 API接口功能: 1. 批量识别:支持将多…...
php多小区智慧物业管理系统源码带文字安装教程
多小区智慧物业管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 统计分析以小区为单位,统计如下数据:小区总栋数、小区总户数、小区总人数、 小区租户数量、小区每月收费金额统计、小区车位统计、小…...
解决虚拟机的网络图标不见之问题
在WIN11中,启动虚拟机后,发现网络图标不见了,见下图: 1、打开虚拟机终端 输入“sudo server network-manager stop”,停止网络管理器 输入“cd /回车” , 切换到根目录 输入“cd var回车” ,…...
【Spring类路径Bean定义信息扫描】
Spring类路径Bean定义信息扫描 1. ClassPathBeanDefinitionScanner作用2. 类声明3. 属性4. 构造器5. 扫描方法6. 真正扫描方法7. postProcessBeanDefinition8. 注册bean定义 1. ClassPathBeanDefinitionScanner作用 扫描类路径下的类注册为bean定义。2. 类声明 public class …...
Ubuntu上安装VMware+win11系统手册
Ubuntu安装vmware 下载: Linux 版下载地址:https://www.vmware.com/go/getworkstation-linux 安装: sudo chmod x VMware-Workstation-Full-17.5.0-22583795.x86_64.bundle 执行安装命令: sudo ./VMware-Workstation-Full-17.5.0…...
2024年1月12日:清爽无糖rio留下唇齿之间的香甜
友利奈绪的时间管理 2024年1月12日08:02:28进行java程序设计的上课准备 2024年1月12日08:02:44知道java的题目有18道 2024年1月12日08:43:07随机数去重比较 2024年1月12日08:54:03C语言题目最小公倍数 2024年1月12日08:58:37C语言题目二维数组变一维数组 2024年1月12日10…...
群晖Synology Drive同步文件时过滤指定文件夹“dist“, “node_modules“
群晖Synology Drive同步文件时过滤指定文件夹"dist", “node_modules” mac用户 安装Synology Drive创建同步任务修改Synology Drive配置 打开/Users/[用户名]/Library/Application Support/SynologyDrive/data/session/[同步任务序号,第一个同步任务就…...
小程序中滚动字幕
需求:在录像时需要在屏幕上提示字幕,整体匀速向上滚动 html部分: <view class"subtitles_main"><view style"font-size:34rpx;color: #fff;line-height: 60rpx;" animation"{{animation}}">人生的…...
MySQL中约束是什么?
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…...
创建企业营销网站包括哪些内容/百度品牌
最近,一边喝着茶一边创造双11奇迹的阿里技术哥哥们火了。当大家感慨双11再次刷新历史的同时,也为阿里创新智能的能力而惊叹。 实际上在阿里巴巴内部,一些先进的智能技术已经运用到员工日常办公场景之中,让大家提高工作效率&#…...
东莞高埗做网站哪个公司好/seo网站优化推广怎么样
昨天做了什么: 昨天重新搜集资料,利用自己往年积累的笔记,群里面共享的文件,网上的知识点总结,并结合现在大一所学的具体知识,对我们的资料重新进行了搜集。 今天在做什么: 昨天对软件的科目结构…...
事业单位 网络网站建设/如何快速被百度收录
1.三角形 题目大意:n根棍子,棍子i的长度ai,选出3根棍子组成周长尽可能长的三角形,输出最大周长,无法组成三角形则输出0限制条件:3≤n≤100,1≤ai≤106做法1:很自然的可以想到穷举所有…...
网站建设 猫云seo/百度如何快速收录网站
官方资料 鱼C课程案例库:https://ilovefishc.com/html5/ html5速查手册:https://man.ilovefishc.com/html5/ css速查手册:https://man.ilovefishc.com/css3/ 学习正文 :link 选择器:https://man.ilovefishc.com/pageCSS3/dotli…...
网络运营者开展经营和服务活动必须遵守法律行政法规/什么是搜索引擎优化?
题目1-平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 2…...
扬州建设集团招聘信息网站/潍坊网站排名提升
1.起源——欧拉公式 ,i是什么,欧拉公式在复平面的意义。eix其实构成了完备的标准正交基。 i代表了旋转。 欧拉恒等式在数学中严谨可以用泰勒公式推导得出,由eix和sinx cosx的泰勒展开可得。 eix可以理解为一个单位圆。并且很容易看出…...