使用(非类型)枚举参数定义内部类成员函数模板

2024-01-06

我在定义和专门化成员函数时遇到困难update()内部类的Outer<T1>::Inner这是在非类型(枚举)参数上模板化的。

#include <cstdlib>

template<typename T1>
struct Outer
{
    struct Inner
    {
        enum Type{ A , B , C };

        template<Type T2>
        void update();
    };
};

// Definition
template<typename T1>
template<Outer<T1>::Inner::Type T2>
void Outer<T1>::Inner::update()
{
}

// Specialization
template<typename T1>
template<Outer<T1>::Inner::A >
void Outer<T1>::Inner::update()
{
}

int main()
{
    return EXIT_SUCCESS;
}

我在 GCC 4.5.3 中收到以下错误消息

prog.cpp:17:28: error: ‘Outer::Inner::Type’ is not a type
prog.cpp:18:6: error: prototype for ‘void Outer<T1>::Inner::update()’ does not match any in class ‘Outer<T1>::Inner’
prog.cpp:11:15: error: candidate is: template<class T1> template<Outer<T1>::Inner::Type T2> void Outer<T1>::Inner::update()
prog.cpp:24:28: error: ‘Outer::Inner::A’ is not a type
prog.cpp:25:6: error: prototype for ‘void Outer<T1>::Inner::update()’ does not match any in class ‘Outer<T1>::Inner’
prog.cpp:11:15: error: candidate is: template<class T1> template<Outer<T1>::Inner::Type T2> void Outer<T1>::Inner::update()

顺便说一句,与 GCC 不同,Visual Studio 2008 无法编译以下内容

template<typename T1>
struct Outer
{
    struct Inner
    {
        enum Type{ A , B , C };

        template<Type T2>
        struct Deep;
    };
};

template<typename T1>
template<typename Outer<T1>::Inner::Type T2>
struct Outer<T1>::Inner::Deep
{
};

首先,你缺少一个typename before Outer<T1>::Inner::Type。你必须拥有它,即使是在一个template输入列表,因为Type是依赖类型。

其次,您的专业化语法是错误的(类型进入<>函数名之后,括号之前,而不是在template<>),但即使它是正确的,它也不合法。你必须专门化外部模板Outer在你完全专业化之前update,根据关于显式模板专业化的不幸规则。

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

使用(非类型)枚举参数定义内部类成员函数模板 的相关文章

随机推荐

  • ASP.Net 的最佳“加载”反馈?

    因此 我们有一个 ASP Net 应用程序 相当标准 并且有很多更新面板和回发 在某些页面上我们有
  • 如何通过 Cygwin 在 Windows 上安装 sshpass?

    在 CygWin 的包窗口中 当我输入 sshpass 时 什么也没有出现 我尝试安装类似的软件包 如 openssh 等 希望其中之一包含 sshpass 但没有运气 sshpass 不作为 Cygwin 软件包提供 这意味着您需要从源代
  • 在 Matlab 中从 .ravi 文件中提取温度

    我的问题 很像这里的帖子 如何从 ravi 文件获取数据 https stackoverflow com questions 58899981 how can i get data from ravi file 我有一个 ravi 文件 辐
  • 在 ggplot 中添加第二个 geom_tile 层

    我有一个相对简单的热图geom tile在ggplot2中 它只是一个由连续数据组成的小矩阵 如彩色框 df1 我想覆盖第二个逻辑 geom tile 来概述TRUE值 df2 这样的事可以做吗 我知道将两个热图添加在一起看起来很丑陋 但这
  • 我如何在 RFM.RFMID=PV.RFMID [重复] 上使用不同的 INNER JOIN RFM

    这个问题在这里已经有答案了 可能的重复 从多个表中获取数据 https stackoverflow com questions 11738574 get data from multiple table SELECT PM PMID RFM
  • 添加故事板视图作为以编程方式创建的视图的子视图

    我创建了一个特殊的 UIView 类 它具有某些属性 并且我以编程方式执行此操作 因为它通常是空白的 但有时会包含其他视图 我知道如果我以编程方式创建 UIView 我可以做类似的事情 specialView addSubview aVie
  • CKEditor + Yii 加载 AJAX:$_POST 不包含更新的值

    简而言之 我正在使用 Yii 框架 我的页面上有一个 Ckeditor 窗口 php yii 框架 工作正常 当我点击按钮时 会生成一个新的 CKeditor 窗口并通过 AJAX 调用显示 问题 这个新的 CKEditor 窗口正确显示数
  • 如何隐藏 HTML 页面的源代码

    我创建了一个 HTML 页面 现在想隐藏源代码并对其进行加密 我怎样才能做到这一点 您可以禁用右键单击 但这是一个坏主意 因为专家可以从您的页面读取任何内容 您无法完全隐藏页面源 这是不可能的 互联网上没有什么是足够安全的 无论如何 您都可
  • 等高列和垂直对齐列中的图像?

    想知道是否有人可以向我展示在图像列中垂直对齐图像并使列的高度等于文本列的最佳方法 CSS padding 0 margin 0 col width 50 float left height 100 col text background s
  • Mac 上的 Qt MySQL

    我浪费了大约 6 个小时试图按照网上的各种说明让 MySQL 与 Qt 一起工作 我现在就想把自己的手腕砍掉 有谁对如何将 QMYSQL 驱动程序安装到 Qt 中有简单和详细的解释吗 我有 Mac 10 6 我是初学者 我将衷心感谢您的帮助
  • Android 中的 Facebook Like 按钮集成

    我想在我的 Android 应用程序中集成 Facebook Like 按钮 请告诉我如何将其集成到 Android 中的步骤 我会尝试使用包含您从中获得的标准 html 集成的 webview 来完成此操作facebook http de
  • scp 或 sftp 使用单个命令复制多个文件

    我想将文件从远程服务器复制到不同的目录中 例如 我想同时运行这 4 个命令 scp remote A 1 txt local A 1 txt scp remote A 2 txt local A 2 txt scp remote B 1 t
  • 解析推送通知最终在 Android 后台崩溃

    我正在使用 Parse 在 android 中推送通知 但当我关闭 wifi 时 它最终会在后台崩溃 它给了我错误 java lang RuntimeException 无法启动接收器 com parse ParseBroadcastRec
  • 从单个 Hive UDF 创建多个列

    我正在使用 Amazon EMR 和 Hive 0 11 我正在尝试创建一个 Hive UDF 它将从一个 UDF 调用返回多个列 例如 我想调用如下所示的 UDF 并返回几个 命名的 列 SELECT get data columnnam
  • 在 Android 中使用工具栏实现正确的后退导航和主页按钮处理

    我在同一活动中使用单个活动和多个片段 附有屏幕截图 来提供无缝导航 但是在实现了最新的工具栏和导航视图之后 似乎很难处理导航和主页按钮 我在以下方面遇到麻烦 Managing the Hamburger Back button at lef
  • System.Drawing.Point' 到 'System.Windows.Point 的转换器

    我正在尝试在 WPF 中绘制一些实体 我的集合包含 System Drawing Rectangle 对象 当我尝试在 WPF XAML 中访问这些对象的位置时 出现以下错误 无法创建默认转换器来执行类型 System Drawing Po
  • 如何创建带有标签和值的 Winforms 组合框?

    我主要是一名 ASP NET 开发人员 但我正在开发 WinForms 应用程序 并注意到 ASP NET 组合框 html 选择 和 WinForms 之间存在很大差异 我发现 也许是错误的 WinForm 的组合框只有一个 标签 而 A
  • github 操作上下文的完整列表

    在调查如何在 github 操作中 我可以将存储库中特定文件的 基本 版本与文件的拉取请求 头 版本进行比较 在调查这一点时 我发现了各种来源 例如 github community https github community t how
  • Apollo Server Express:请求实体太大

    我需要在 GraphQL 突变中发布大量有效负载 如何提高 Apollo Server 的主体大小限制 我在用着apollo server express版本 2 9 3 我的代码 简化 const myGraphQLSchema new
  • 使用(非类型)枚举参数定义内部类成员函数模板

    我在定义和专门化成员函数时遇到困难update 内部类的Outer