D 中的模板参数推理

2024-02-07

我正在编写一些对静态 D 数组进行操作的向量函数,如下所示:

real[N] unit(uint N)(real[N] v) {
    real[N] u = (v[] / norm(v)); //explicit type necessary to force slice-operator
    return u;                    //to return static-length array
}

real[3] v = unit!(3)([1,2,3]);   //works
real[3] w = unit([1,2,3]);       //error, compiler doesn't infer the template parameter
real[3] x = [1,2,3];
auto i = unit(x);                //also works, forces statically allocated array

所以,我的问题是,如果我将文字数组直接传递给函数,有没有办法让编译器推断出模板参数 N ?我尝试使用“1.0L”格式,希望该数组是从 int 或 float 的静态数组转换而来,但这也不起作用。TL;DR 我可以使上面的中间示例 (w) 工作吗? Thanks!

编辑:只是为了澄清一下,我尝试了一些带有专门模板参数的变体,但我不确定我是否正确地做到了这一点。我也尝试过,在通话中,new real[3]([1,2,3])强制分配堆静态数组(三角独角兽?),但我无法编译它。


问题是[1,2,3]不是静态数组。这是一个动态数组,所以它can't匹配。这是错误的类型,并且无法拥有静态数组文字。如果要将数组文字作为静态数组传递,则需要先将其分配给变量或将其转换为所需的类型。

auto w = unit(cast(real[3])[1,2,3]);

应该管用。就我个人而言,我认为最好只是显式实例化模板

auto w = unit!3([1, 2, 3]);

因为它避免了演员阵容搞砸的风险。

现在,我认为有一个明确的论点,即编译器应该在这种情况下工作,但它对模板的选择往往比对普通函数的选择要严格得多,因为它通常会使用您传递给它的确切类型来实例化模板,而无需尝试执行任何隐式转换,而普通函数会将动态数组隐式转换为静态数组。随意地打开增强请求 http://d.puremagic.com/issues。行为可能会改变。它was最近进行了更改,以便 IFTI(隐式函数模板实例化)使用数组的 tail-const 版本进行实例化(例如immutable(char)[]代替immutable(char[])),这是一个明显的进步。现在,这与尝试转换有点不同(我相信编译器会自动将数组视为 IFTI 的尾部常量),所以我不知道在这种情况下改变编译器行为的可能性有多大高的。但问一下也没什么坏处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

D 中的模板参数推理 的相关文章

随机推荐

  • 合并多个 javascript 文件

    我读过 将多个 javascript 文件合并到一个文件中可以提高性能 这是真的吗 如果是这样 是否有一种简单且无错误的方法来合并它们 或者也许有一个自动执行此操作的在线工具 非常感谢 See 多个 javascript css 文件 最佳
  • Windows 上的 Qt5 部署

    我一直在研究如何将我的桌面应用程序从 Qt5 Creator 部署到一组 dll 和一个 exe 记录的过程似乎极其复杂 http qt project org doc qt 5 0 qtdoc deployment windows htm
  • 在 i18next 中转义特殊字符

    所以我有这个变量 它将包含类似 的内容 然后我有这个 var vocab mm responses positive lngs LANG target User tag amount r multiplier icon iconFile 这
  • 我如何设置 jQuery 日期选择器的年份范围:1900 到当前年份,或 1900 到 9999

    大家好 我用过Jquery Date picker这对我来说已经足够好了 但我有一个小问题 即我想设置Start year from 1900 and End year to Current Year or 9999 在脚本中我找到了这个y
  • 使用 WTForms 和 Flask 预填充编辑表单

    我可以使用 WTForms 和 Flask 向数据库添加新条目 并且也可以进行编辑 问题是我需要以编辑表单显示数据库中已存在的信息 我有以下代码 编辑帖子表单的类 class editPostForm Form postTitle Text
  • 尝试使用 Python 通过 API 访问数据时出错

    尝试使用 API 访问有关服务器存储的详细信息时出现错误 我想提取备份状态state在 JSON 中 storage access private backup rule backups backup license 0 part of p
  • 未定义方法 stringify!使用meta_search和active_admin gems时出错

    我正在使用 active admin gem 并且由于它需要 meta search gem 所以我想在管理页面之外提供搜索功能 当我向 Model search 方法提供字符串时 出现未定义的方法错误 根据meta search文档 这就
  • 如何在 Docker 中处理持久存储(例如数据库)

    人们如何处理 Docker 容器的持久存储 我目前正在使用这种方法 构建图像 例如对于 PostgreSQL 然后使用以下命令启动容器 docker run volumes from c0dbc34fd631 d app name post
  • .NET 中的“美国东部标准时间”与“东部标准时间”

    在列出所有Id的属性TimeZoneInfos 返回者TimeZoneInfo GetSystemTimeZones 出现两个版本的 EST 美国东部标准时间和东部标准时间 有什么不同 我还看到美国山地标准时间和山地标准时间 但我很确定这是
  • JDBC 程序中的 java.lang.ClassNotFoundException [重复]

    这个问题在这里已经有答案了 我正在 java SE 7 中制作一个简单的 JDBC 程序 但在编译程序后 它给出了 java lang ClassNotFoundException org postgreasql Driver 错误 我按照
  • Delphi快速加大整数?

    function AddNumStrings Str1 Str2 string string var i integer carryStr string worker integer workerStr s string begin Res
  • 如何使用同一个工人让芹菜重试?

    我刚刚开始在 Django 项目中使用 celery 并且有点陷入这个特定问题 基本上 我需要将长期运行的任务分发给不同的工作人员 该任务实际上分为几个步骤 每个步骤都需要相当长的时间才能完成 因此 如果某个步骤失败 我希望 celery
  • mclapply 与大对象 - “序列化太大,无法存储在原始向量中”

    我一直遇到一个问题multicore包裹和大物体 基本思想是我使用 Bioconductor 函数 readBamGappedAlignments 读取大对象 我有一个文件名的字符向量 并且我一直在使用mclapply循环遍历文件并将它们读
  • iOS7 中旋转后 UITextview 文本不显示顶行

    我有一个包含显示静态文本的 UITextview 的应用程序 我使用 UITextview 来滚动文本 该文本比 UILabel 中可以显示的长得多 由于某种原因 iOS 7 下 UITextview 中的文本在旋转后不会保持滚动到顶部 在
  • Django /subdirectory/admin/ 重定向到 /admin/login/?next=/admin/

    我在端口 8011 上设置了一个 Django 服务器 并让 nginx 将其作为端口 80 上的子目录 静态文件 很好 页数 不错 但是当我访问 subdirectory admin 时 它需要我 admin login next adm
  • 是什么限制了我的 PHP 资源?

    我在从 PHP 中获取更多内存时遇到问题 这是错误消息 Fatal error Allowed memory size of 20971520 bytes exhausted tried to allocate 82 bytes in Ye
  • 存储大量数据的最智能方式

    我想通过 REST 请求访问 flickr API 并下载大约的元数据 1 张 Mio 照片 也许更多 我想将它们存储在 csv 文件中 然后将它们导入 MySQL 数据库以进行进一步处理 我想知道处理如此大数据的最明智的方法是什么 我不确
  • 在 fancybox 中加载图像 150% 的大小

    我只是创建一个愚蠢的 GIF 画廊 其中显示一个缩略图 单击时相关的 GIF 将被加载并显示在一个 fancybox 中 我的 fancybox 的代码是这样的 fancyGIF fancybox arrows false openEffe
  • XML 元素和命名空间

    我有以下方法来解析 XMLElements DisplayMessages XElement root var items root Descendants Item foreach var item in items var name i
  • D 中的模板参数推理

    我正在编写一些对静态 D 数组进行操作的向量函数 如下所示 real N unit uint N real N v real N u v norm v explicit type necessary to force slice opera