模板特化与别名模板推导区别

2024-01-11

我很难理解在以下情况下演绎是如何工作的:

template<class Category, Category code>
struct AImpl
{ };

template<class Category, Category code>
struct AHelper
{
    using type = AImpl<Category, code>;
};

template<class Category, Category code>
using A = typename AHelper<Category, code>::type;

template<int code>
void doSomething(A<int, code> object)
{
}

以下是测试代码:

A<int, 5> a1;
doSomething(a1); // This does not compile
doSomething<5>(a1); // This compiles

为什么 a1 没有在这种情况下推导出来?

如果您按以下方式修改 A:

template<class Category, Category code>
struct A
{ };

两者都有效。有人知道为什么吗?

[编辑] 问题链接到混合别名和模板专业化 https://stackoverflow.com/questions/55969287/mixing-aliases-and-template-specializations


为什么 a1 没有在这种情况下推导出来?

因为模板参数doSomething出现在非推导的上下文中。别名模板几乎完全代表它的别名。你的定义如下:

template<class Category, Category code>
using A = typename AHelper<Category, code>::type;

推论code,编译器需要推导出左侧的一些内容::这是一个非推导的上下文。如果某个参数出现在作用域解析运算符左侧,模板参数推导甚至不会尝试推导它。

这是一个未推断的上下文并非没有原因。请记住,模板可能是专门的。我可以添加这个:

template<Category code>
struct AHelper<int, code>
{
    using type = BImpl<code>; // My own class!
};

编译器需要查看整个程序中的所有代码并尝试所有类型以确保没有发生任何恶意行为,以确保a1确实匹配typename AHelper<Category, code>::type。这很棘手。因此,元功能的映射只是一条单行道。您不能要求编译器从目标类型推断出源类型(或非类型参数)。

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

模板特化与别名模板推导区别 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 在 Flask 中创建不返回响应的视图函数

    我对网络编程和 Flask 相当陌生 最近我尝试创建的网站遇到了问题 我目前有一个 jquery 过程 它将 post 请求发送到 Flask 中的视图函数 该函数只是增加我的数据库中的一个值 并且我实际上没有必要在增加该值后返回响应 然而
  • 如果开关盒掉落,如何使 MSVC 发出警告或失败?

    如果我的 switch 语句之一有一个不会中断的情况 我希望收到警告 错误 这可能吗 switch i case 1 cout lt lt one forgot to break here I want to be warned about
  • .pem、.cer 和 .der 之间有什么区别?

    两者有什么区别 pem cer and der 据我所知 cer包含公钥 是否有任何开放框架可用于使用此公钥加密我的数据 pem cer and der都是可能包含 X 509 v3 证书的文件的文件扩展名 The der扩大 DER 是对
  • iPhone Flash 中的不同屏幕尺寸? (出现黑条)

    我是整个编码世界的新手 而 ActionScript 3 是我第一次真正的体验 如果我不能立即理解您的答案 很抱歉 我在 AIR for iOS 中使用 Adob e Flash CC 构建了一个 iPhone 应用程序 所有代码都位于时间
  • Angular 6:如何使用 Angular Material 隐藏无线电圆圈并使用 NgStyle 来检查答案?

    我在两件事上遇到了麻烦 隐藏 mat radio group 的圆圈 如果选中 请将 p 标签背景更改为蓝色 我尝试使用 ng deep 覆盖 css 属性并将颜色更改为白色 尝试配置 invisibility hidden 但没有成功 另
  • 导航属性“SenderId”不是类型“Conversation”上声明的属性

    当我尝试更新数据库时 出现以下错误 导航属性 SenderId 不是类型 Conversation 上声明的属性 验证它是否未从模型中显式排除并且它是有效的导航属性 Edit 我认为问题在于对话和用户之间的映射关系 因为对话和用户以两个一对
  • DTLS 和 TLS 之间的区别

    TLS 和 DTLS 之间的功能区别是什么 使用 TLS 与 DTLS 时应用程序流程 协商有何不同 基本上 DTLS 是在数据报 UDP DCCP 等 上构建 TLS DTLS 有意与 TLS 类似 只不过 DTLS 必须解决两个问题 数
  • (异步)NSURLConnection:下面发生了什么?

    我知道它必须处理启动线程来发出网络请求的丑陋 然后可能调用performSelectorOnMainThread 用我的委托方法 我知道怎么做use在进行 iOS 编程时 它效果很好 但是 我想知道如何使其在 例如 命令行实用程序的上下文中
  • 在keycloak登录页面显示应用程序名称

    我有两个应用程序App1 and App2与相互作用keycloak用于用户身份验证 我想在以下位置显示应用程序名称keycloak登录页面 例如 如果用户正在登录App1 the keycloak登录页面应显示 登录到 App1 同样的情
  • 如何在 Travis 中显示 HTML 格式的输出文件?

    我正在尝试使用 Travis CI 在 Bintray 上部署 Android 库 但是当我上传我的仓库时 我得到了这个 Ran lint 变体发布 发现 6 个问题 Ran lint on variant debug 6 issues f
  • 存储轮播图像的最佳方式是什么?

    我正在使用 Ruby on Rails 我的目标网页上有两个轮播 我想知道存储和显示这些图像的最佳方式是什么 选项一 将图像放入assets images并在轮播中显示它们 如果这是一种好方法 我可以循环浏览文件夹中的图像还是必须指定每个文
  • 我可以在 WinRT 应用程序中使用 Sqlite (javascript) 吗?

    是否可以在 Windows 8 winRT javascript 应用程序中使用 Sqlite 数据库 我想要实现的是下载一个 Sqlite 数据库并在使用前将其存储在本地存储中 我相信某种形式的本地存储可用于基于 javascript 的
  • 从头开始创建 geom / stat

    我不久前刚刚开始使用 R 目前正在努力加强我的可视化技能 我想做的是创建箱线图平均钻石作为顶部的一层 参见下面链接中的图片 我还没有找到任何可以执行此操作的函数 所以我想我必须自己创建它 我希望做的是创建一个几何或统计数据 让这样的事情能够
  • Azure 服务总线重试策略不会改变行为

    我试图了解 Azure 服务总线上的重试策略 但它没有按我预期的方式工作 我有以下代码 它既侦听消息又将消息发送到特定的天蓝色队列 using System using Microsoft ServiceBus using Microsof
  • 如何更改 C# 中 UWP 应用中按钮的背景颜色?

    我有一个简单的 我需要每秒改变按钮的颜色 我用这个代码btnBlue Background new SolidColorBrush Windows UI Colors Blue 但它不包含我在 xaml 中使用的自定义颜色 例如 FF30B
  • 带参数“-S -save-temps”的 gcc 将中间文件放入当前目录中

    参数 S save temps工作正常 只要我不在同名文件上使用它们 考虑以下情况 我有一个项目 有一个主目录和一个名为subDir并且在这两个目录中都放置了名为file c 如果我现在打电话gcc S save temps file cp
  • 如何锁定 iPhone 某些视图控制器的方向 - Swift?

    我有 2 个视图控制器 VC1 和 VC2 VC1 目前以模态方式呈现 VC2 VC1 仅方向应为纵向 但 VC2 可以具有所有方向 问题是当我在 VC2 中并且我旋转到横向模式然后关闭时 VC1 也处于横向模式 这绝对不应该发生 NOTE
  • 单元测试实体框架验证

    我使用 IValidatableObject 为某些实体框架对象编写了一些自定义验证 并向对象添加了一些 DataAnnotations 以进行验证 我想测试验证是否满足所需的验证 确保自定义验证正常工作 并且所做的任何更改都保留这些数据注
  • Ansible:如何初始化 git bare 存储库并将其克隆到同一台机器?

    我想问一下 如何使用 Ansible 来实现这样的情况 我的主要目标是 nit git bare 存储库并将其克隆到同一台计算机 var www 我通常的步骤是 1 git init bare 在 git project name 中运行
  • 模板特化与别名模板推导区别

    我很难理解在以下情况下演绎是如何工作的 template