错误:类模板部分特化包含无法推导的模板参数

2024-01-08

我非常感谢您帮助弄清楚我的代码中出现的这个问题,我已将其简化为以下内容:

typedef unsigned short ushort;

template<typename T = ushort*>
struct Foo
{
};

// Specialization -- works when not a specialization
template<
    template<typename,typename> class Container ,
    template<typename , template<typename,typename> class> class MetaFunction
    >
struct Foo<Container<ushort,typename MetaFunction<ushort,Container>::Type> >
{   
    //typedef Container<ushort,typename MetaFunction<ushort,Container>::Type> TestType; // OK
};

int main()
{
}

编译时(gcc 5.4.0)我收到错误:

Test.cpp:14:8: error: template parameters not deducible in partial specialization:
 struct Foo<Container<ushort,typename MetaFunction<ushort,Container>::Type> >
        ^
Test.cpp:14:8: note:         ‘template<class, template<class, class> class<template-parameter-2-2> > class MetaFunction’

奇怪的是,这个论点Container<ushort,typename MetaFunction<ushort,Container>::Type>专业化似乎是有效的。


这里的问题是

MetaFunction<ushort,Container>::Type

is a 非推导上下文,换句话说,编译器无法从中推断出模板参数,因此您的专业化无效。要了解原因,请从之前的 SO 问题中了解更多信息

什么是非演绎上下文? https://stackoverflow.com/q/25245453/3093378

基本上,非推导的上下文可以归结为

template<typename T>
struct Identity
{
    using type = T;
};

现在的模式是这样的Identity<T>::type, T不会被推断出来,尽管对你来说它可能看起来很明显(再次参见我提供的链接中的示例以了解为什么会这样,它与部分专业化以及类型和成员之间缺乏 1-1 对应关系有关专业化)。

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

错误:类模板部分特化包含无法推导的模板参数 的相关文章

随机推荐

  • Kivy 多显示器

    我正在考虑使用 Kivy 创建一个需要在每个监视器上显示一个窗口的程序 有没有办法实现这一点 我也不希望有一个跨越的窗口 如果没有 是否有另一个 好看的 windows linux GUI 工具包可以完成这个任务 您可以有两个单独的窗口运行
  • 添加常见图例

    我试图做一个多图ggplot2 这是我最初的代码 nucmer s1 lt ggarrange eight uniform ten uniform twelve uniform fourteen uniform sixteen unifor
  • 一次撤销多个用户的 Oracle 权限

    我们正在合理化我们的数据库用户权限 为此 我们希望撤销授予所有用户 但不是特定角色 的架构中所有表的所有选择权限 通过一些正则表达式 我尝试创建一个通用的revoke对于每个表 给出如下内容 撤销 USER1 USER2 USER3 对 T
  • SQL*Plus 脚本执行两次

    我正在尝试使用 sqlplus 运行脚本 我的脚本是一个简单的删除语句 我通过将以下内容放入 ksh 终端来执行它 sqlplus username password sql delete societes sql sql delete s
  • AttributeError:“模块”对象没有属性“请求”

    当我在 Python 3 3 中运行以下代码时 import urllib tempfile urllib request urlopen http yahoo com 我收到以下错误 我也这样做来验证 我究竟做错了什么 The urlli
  • 如何在 Unity 协程中通过引用局部变量?

    我有一些函数可以接受 Enemy 实例并更改其字段之一 敌人类别有一些基本字段 如速度 伤害 攻击范围 每个函数只存储敌人的一个正常值 然后将当前字段更改为某个值一段时间 然后将其更改回正常状态 我在 Unity 中编写代码并使用 Coro
  • 无法在anaconda上安装tensorflow

    我正在尝试在 anaconda 上安装tensorflow i tried conda install c conda forge tensorflow 但安装卡住了Solving environment 寻找解决方案 因此有人建议使用调试
  • 使用回车键提交输入字段

    我正在构建天气应用程序 并希望使用 Enter 键将城市名称提交到服务器 我收到错误 提交不是一个函数 我想解决这个问题 并且想知道如何将值发送到 Express 服务器 以便在 API 调用中使用它 这是我的代码
  • 如何将 Beyond Compare 与 ClearCase 集成?

    我想将 Beyond Compare 与 ClearCase 集成 这样我就可以用它来比较和合并文件 而不是 ClearCase 提供的那些糟糕的工具 有人有执行此集成的说明吗 正如我的文章中提到的之前的回答 https stackover
  • 用于访问数组中第一个/最后一个元素的 Ruby 约定[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是一个关于约定的问题 下面的两组命令返回相同的结果 a 1 2 3 a first gt 1 a 0 gt 1 a last gt 3 a 1
  • 我可以在 Android 上获得英语以外语言的语音识别吗?

    我正在尝试构建一个应用程序 将使用印地语和其他区域语言 来获取语音命令 我的应用程序中还需要文本转语音功能 我想知道是否有什么方法可以在 Android 上获得语音识别库 我在 Google 上进行了快速搜索 并在互联网上找到了几个印地语库
  • 无法 ssh 到 AWS EC2:身份文件无法访问[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • HTML 输入字段禁用输入但仍然 POST

    基本上我想要一个禁用文本字段来显示存储在数据库中的值 但我不希望用户可以编辑它 我尝试过使用disabled disabled 但随后它不再发布到我的表单处理程序 有什么建议么 thanks docu http www w3 org TR
  • 构建一台 LISP 机器需要多少原语?十个、七个还是五个?

    在这个网站上 他们说有 10 个 LISP 原语 原语是 atom quote eq car cdr cons cond lambda label apply http hyperpolyglot wikidot com lisp ten
  • 用于运行检测显示器的 Applescript

    当我将外接显示器插入 Macbook 并唤醒它时 显示器的分辨率通常是错误的 在使用 Mountain Lion 之前 我能够运行以下 applescript 来检测显示器 tell application System Preferenc
  • 给定 y 值获取 x 值:线性/非线性插值函数的一般求根

    我对插值函数的一般求根问题感兴趣 假设我有以下内容 x y data set seed 0 x lt 1 10 runif 10 0 1 0 1 y lt rnorm 10 3 1 以及线性插值和三次样条插值 f1 lt approxfun
  • 基于Memcache的消息队列?

    我正在开发一款多人游戏 它需要一个消息队列 即消息输入 消息输出 没有重复或删除的消息 假设没有意外的缓存驱逐 以下是我所知道的基于内存缓存的队列 内存缓存问 http memcachedb org memcacheq http memca
  • Prolog:寻找所有解决方案

    标题可能看起来像是一毛钱一打 但事实并非如此 该计划的目的是学习这些课程 需要 needs ece2090 1 m 13 16 ece3520 1 tu 11 14 ece4420 1 w 13 16 并将他们与有资格教授课程并且在此期间也
  • 哪些编程语言可以生成自包含的 Windows .exe?

    我想要制作一个易于部署的 Windows 应用程序 并且想知道哪些编程系统可以创建完全独立的 Windows exe 文件 另外 如果可以使用同一来源的 MacOSX 和 Linux 来完成同样的事情 这将是一个额外的好处 我查看了 Rea
  • 错误:类模板部分特化包含无法推导的模板参数

    我非常感谢您帮助弄清楚我的代码中出现的这个问题 我已将其简化为以下内容 typedef unsigned short ushort template