explicit specialization of non-template

2023-05-16

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、C++模板是什么?
  • 二、错误原因
    • 1.主模板
    • 2.解决方法
  • 总结


前言

相信很多人在使用C++模板特例化都遇到过这个错误,很多人不知道原因甚至一头雾水,接下来我就用这篇文章解释下出现这个错误的原因。


一、C++模板是什么?

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。

二、错误原因

缺少主模板声明。

1.主模板

当同时拥有一个模板的通用定义及其针对特定模板实参集合定义的特例化实现版本时,我们称最通用的模板定义为主模板(primary template)。主模板用来确定某个模板的使用是否合法,并参与重载解析。只有主模板被匹配后,才会考虑特例化版本。

2.解决方法

先声明主模板,再声明特例化模板,举个例子:

template<typename T>
class Node;//通用的,主模板
template<typename T>
class Node<T*>;//任意指针的特例化版本
template<>
class Node<void*>;//void*的特例化版本

注:主模板必须在任何特例化版本之前声明。如果程序中用到主模板,我们需要在某处给出定义。如果主模板在程序中从未实例化,则无需给出定义,只保留声明即可。


总结

模板的所有特例化版本都应声明在与主模板相同的名字空间中。如果某个特例化版本被使用,而且它是显式声明的,则它必须显式定义。换句话说,显式特例化一个模板就意味着编译器不再为此特例化版本生成其它定义。

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

explicit specialization of non-template 的相关文章

  • 使用cas-overlay-template搭建cas服务器

    背景 在多服务统一帐号的应用集中 xff0c 单点登录是必不可少的 CAS就是成熟的单点登录框架之一 Github地址 https github com apereo cas 现在我们就通过一系列快速简单的构建方式实现一个简单的单点登录系统
  • 模板template的使用

    函数模板应用实例 C 43 43 与C的不同点 xff1a 模板template的使用 include lt iostream gt 无需加上 34 h 34 using namespace std 使用命名空间 template lt t
  • cannot declare ‘::main‘ to be a template

    main是c默认的主函数入口 其原型已经有规定了 int main int argc char argv
  • template < class T> ,map和vector用法——恶补c++

    部分目录 template lt class T gt 是什么找到各素数因子map数组下用法map遍历map元素的默认值 vector 用法 template lt class T gt 是什么 template lt class T gt
  • VS Code 调试JavaScript报错:“crbug/1173575, non-JS module files deprecated”

    按照网上的方法 xff08 VSCODE 调试 Javascript xff09 装好debugger for chrome扩展后 xff0c 调试JavaScript xff0c 结果无法正常在浏览器中显示网页 xff0c 报错 xff1
  • warning: control reaches end of non-void function

    用gcc编译一个程序的时候出现这样的警告 xff1a warning control reaches end of non void function 它的意思是 xff1a 控制到达非void函数的结尾 就是说你的一些本应带有返回值的函数
  • C++template模板

    模板 xff08 Template xff09 指C 43 43 程序设计设计语言中采用类型作为参数的程序设计 xff0c 支持通用程序设计 C 43 43 的标准库提供许多有用的函数大多结合了模板的观念 xff0c 如STL以及IO St
  • C++ 之 explicit,mutable,volatile 浅析

    explicit 放在构造函数前面可以阻止构造函数的隐式类型转换 这样可以避免不必要的错误 代码用例 public static explicit operator RMB float f uint yuan uint f uint jia
  • 手摸手,带你用vue撸后台 系列四(vueAdmin一个极简的后台基础模板)(好文章!!)

    转载自 原文格式清晰 https juejin im post 6844903486241374221 完整项目地址 vue element admin 系列文章 手摸手 带你用 vue 撸后台 系列一 基础篇 手摸手 带你用 vue 撸后
  • 如果组件扫描被删除,@Autowired 不起作用

    我面临的问题是 如果我从配置中删除组件扫描标记 则注释 Autowired 不再起作用 在使用此注释的所有 Java 类中
  • 部分类模板特化是这个设计问题的答案吗?

    假设您有一个类 其工作是连接到远程服务器 我想抽象这个类以提供两个版本 一个通过UDP连接 另一个通过TCP连接 我想构建尽可能精简的运行时代码 而不是使用多态性 我正在考虑模板 这是我的设想 但我不确定这是最好的方法 class udp
  • 使用模板类的函数模板专业化[重复]

    这个问题在这里已经有答案了 可能的重复 函数模板的部分特化 我无法在任何地方找到我的问题的解决方案 因为如果我使用我提出的关键字进行搜索 将为我提供适合不同问题的解决方案 我知道这一定是以前问过的 只是找不到解决方案 假设我有一个函数模板
  • Perl:全局符号需要显式包名称

    因此 我一直在尝试找到解决方案 但到目前为止 我在网上阅读的所有内容都与范围问题有关 而不是用my关键词 然而 我似乎无法解决这些问题 因为我已经在顶部声明了所有内容 并且至少对我来说 似乎我没有范围问题 我的以下代码的错误是 Global
  • const char* 的模板方法特化

    考虑这个片段 struct S template
  • 使用空花括号初始化

    第一次尝试 一切正常 class Base public Base std cout lt lt default ctor n Base b Base b one 另一种实现方式 添加explicit class Base public e
  • Swift 协议专用通用协议

    是否有可能有一个专门针对通用协议的协议 我想要这样的东西 protocol Protocol RawRepresentable typealias RawValue Int 这确实可以编译 但是当我尝试访问init or rawValue从
  • 运算符()的部分特化

    我的一个类声明了一个模板化函数 template
  • 为什么类中不允许函数模板特化?

    在stackoverflow上找到了我的许多问题的答案后 我现在遇到了一个我找不到答案的问题 我希望有人愿意帮助我 我的问题是我想在 C 类中对函数进行显式模板化 我的编译器 g 和 C 标准 14 7 3 告诉我 这种专业化必须在声明类的
  • 使用显式与隐式意图启动 Android 服务

    根据标准 Android 文档 启动服务 即启动服务 的首选方法是使用如下所示的显式意图 Using explicit intent Intent serviceIntent new Intent getApplicationContext
  • 显式模板专业化

    我不想问这样一个笼统的问题 但下面的代码是显式模板专业化的练习 我不断收到错误 c users documents visual studio 2010 projects template array template array arra

随机推荐

  • SpringBoot web开发(2)session登录注册

    SpringBoot web开发 xff08 2 xff09 session登录注册 新建 LoginController java 文件使用 session 控制登录 64 Autowired HttpSession session 添加
  • SpringBoot web开发 (3) 使用 mysql-jpa 登录验证

    3 使用 mysql jpa 构造 数据库实体类型 添加maven依赖 lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId
  • JAVA+Netty根据二级域名实现多租户内网穿透功能【设计实践】

    目录 背景 实践 项目结构 原理分析 代码实现 cc common项目 cc server项目 cc client项目 Nginx配置 使用 启动服务端 启动客户端 背景 上一篇JAVA基于Netty实现内网穿透功能 设计实践 殷长庆的博客
  • C++:stringstream格式化字符串

    C语言通过snprintf对字符串进行格式化 格式化前需要首先对字符串的长度预估 如果长度大于了字符数组的大小 格式化字符串会被截断 C 通过stringstream对字符串进行格式化 include lt sstream gt inclu
  • Ubuntu:apt软件包管理工具

    apt是Advanced Packaging Tool 是Ubuntu的安装包管理工具 主要的几个操作为 1 安装软件包 sudo apt install 软件包名 2 卸载软件包 而保留软件的配置文件 sudo apt remove 软件
  • CMake:message输出消息

    可以在执行cmkae的时候使用message输出信息 xff1a message lt mode gt 34 message text 34 其中mode有如下几个选项 xff08 优先级由低到高 xff09 xff1a TRACE xff
  • C++(11):通过underlying_type获取/输出枚举类的值

    C 11 枚举类 风静如云的博客 CSDN博客 c 11 枚举类 介绍了枚举类使用的好处 不过如果直接输出枚举类的值是不行的 include lt iostream gt using namespace std int main enum
  • gitlab-ce安装

    GitLab是一个利用 Ruby on Rails 开发的开源应用程序 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab拥有与Github类似的功能 xff0c 能够浏览源代码
  • WSL2安装到其它目录下

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 下载Ubuntu20 041 打开Mocrosoft Store2 导出发行版 总结 前
  • 解决Ubuntu20.04安装CUDA-11.2报256错误的问题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 报错的原因是什么 xff1f 二 安装cuda 11 2三 安装nvidia driver 455四 再装cuda 11
  • ARM整形算力计算

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 RK3399规格 xff1f 二 开始计算1 参考2 计算 总结 前言 之前做人工智能使用RK3399的CPU去推理 x
  • WSL2使用USB设备

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 编译内核1 查看自己的内核2 准备工作3 下载适合自己的内核版本4 开始编译4 使用内核
  • cron的正确食用方法

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 cron是什么 xff1f 二 使用步骤1 字段含义2 加强学习3 crontab命令4 工作原理5 其它用法6 补充内
  • windows 下 mongodb 导入导出collection(json、csv)

    1 下载mongodb xff0c 并安装 https www mongodb com dr fastdl mongodb org win32 mongodb win32 x86 64 2008plus ssl 3 4 0 signed m
  • 【WSL2启用systemd支持(一个配置即可)】

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 备份数据1 归档2 备份分支 三 准备工作1 内核升级 四 修改配置总结 前言 很
  • WSL2+Systemd支持度测试

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 开始测试1 Docker2 rsyslog3 systemd timesyncd4
  • 部分解决Ubuntu安装X11VNC需要自动登录的问题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 GDM是什么 xff1f 二 VNC绑定GDM账户1 vnc绑定gdm登录 总结 前言 Ubuntu18 04 Ubun
  • Linux watchdog配置

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 watchdog是什么 xff1f 1 硬件看门狗2 软件看门狗 二 使用步骤1 硬件看门狗2 软件看门狗 总结 前言
  • Ubuntu内核打开硬件watchdog

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 watchdog是什么 xff1f 1 硬件看门狗2 软件件看门狗 二 编译内核1 添加配置2 开始编译3 安装内核4
  • explicit specialization of non-template

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 C 43 43 模板是什么 xff1f 二 错误原因1 主模板2 解决方法 总结 前言 相信很多人在使用C 43 43