显式模板实例化 - 何时使用?

2023-11-24

休息几周后,我试图通过这本书来扩展和扩展我对模板的知识模板 – 完整指南由 David Vandevoorde 和 Nicolai M. Josuttis 编写,我现在想要理解的是模板的显式实例化。

我实际上对该机制本身没有问题,但我无法想象我想要或想要使用此功能的情况。如果有人能向我解释这一点,我将不胜感激。


如果您定义了一个模板类,您只想为几个显式类型工作。

像普通类一样将模板声明放在头文件中。

就像普通类一样,将模板定义放在源文件中。

然后,在源文件的末尾,仅显式实例化您希望可用的版本。

愚蠢的例子:

// StringAdapter.h
template<typename T>
class StringAdapter
{
     public:
         StringAdapter(T* data);
         void doAdapterStuff();
     private:
         std::basic_string<T> m_data;
};
typedef StringAdapter<char>    StrAdapter;
typedef StringAdapter<wchar_t> WStrAdapter;

Source:

// StringAdapter.cpp
#include "StringAdapter.h"

template<typename T>
StringAdapter<T>::StringAdapter(T* data)
    :m_data(data)
{}

template<typename T>
void StringAdapter<T>::doAdapterStuff()
{
    /* Manipulate a string */
}

// Explicitly instantiate only the classes you want to be defined.
// In this case I only want the template to work with characters but
// I want to support both char and wchar_t with the same code.
template class StringAdapter<char>;
template class StringAdapter<wchar_t>;

Main

#include "StringAdapter.h"

// Note: Main can not see the definition of the template from here (just the declaration)
//       So it relies on the explicit instantiation to make sure it links.
int main()
{
  StrAdapter  x("hi There");
  x.doAdapterStuff();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显式模板实例化 - 何时使用? 的相关文章

  • 为什么我需要显式编写“auto”关键字?

    我正在从 C 98 转向 C 11 并且已经熟悉了auto关键词 我想知道为什么我们需要明确声明auto编译器是否能够自动推导类型 我知道 C 是一种强类型语言 这是一条规则 但如果不显式声明变量就不可能实现相同的结果auto 放弃显式的a
  • C# SMO 远程数据库备份到本地机器

    我有一个执行 SQL 数据库备份和恢复的应用程序 这在本地计算机上运行良好 但是如果我针对另一台计算机上托管的 SQL 服务器运行此应用程序 则会出现以下错误 Microsoft SqlServer Management Smo Faile
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • 隐式转换和编译器的不同行为

    Motivated by this question https stackoverflow com q 51972738 5800831 I created the following code struct X X int struct
  • Makefile:如何正确包含头文件及其目录?

    我有以下 makefile CC g INC DIR StdCUtil CFLAGS c Wall I INC DIR DEPS split h all Lock o DBC o Trace o o cpp DEPS CC o lt CFL
  • Magento SOAP V2 API - 附加属性设置为空

    几个小时以来 我一直在尝试通过 SOAP V2 API 创建具有附加属性的产品 每当我打电话时就会添加该产品目录产品创建但我随请求发送的附加属性被设置为空 每当我不添加附加属性时 这两个属性都会设置为其默认值 因此我认为这些属性正在发送和接
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • ld: 无法对非 PE 输出文件执行 PE 操作错误

    我是操作系统编程的新手 我正在读一本书 其中给出了一个简单的内核示例 如下所示 main char video memory 0xb8000 video memory X 为了编译这个名为 kernel c 的文件 我在 Windows 7
  • 如何在不加载到内存的情况下对大型 csv 文件进行排序

    我有 20GB csv 文件 如下所示 CallId MessageNo Information Number 1000 1 a 2 99 2 bs 3 1000 3 g 4 66 2 a 3 20 16 3 b 1000 7 c 4 99
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的
  • 编写一个转储屏幕像素的 RDP 客户端

    我想在中实现 RDP 客户端C 它能够获取屏幕所有像素的颜色值并将它们转储到文件中 我知道这在概念上与 RDP 的工作方式不同 但我的应用程序需要它 我正在尝试利用freerdp https github com FreeRDP FreeR
  • 删除指针后将其设为 NULL 是一个好习惯吗?

    我首先要说的是 使用智能指针 您将永远不必担心这个问题 下面的代码有什么问题 Foo p new Foo use p delete p p NULL 这是由答案和评论 https stackoverflow com questions 19
  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • 命名约定 - C++ 和 C# 变量中的下划线

    常见的是看到一个 var类字段中的变量名 下划线是什么意思 所有这些特殊命名约定都有参考吗 下划线只是一种约定 而已 因此 每个人的使用总是有些不同 以下是我对这两种语言的理解 在C 中 下划线通常表示私有成员变量 在 C 中 我通常只在为
  • 使用绝对定位是否被认为是不好的做法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在开发一个网页 在其中放置一个类似国际象棋的游戏的棋盘 以及几个棋子托盘 这一切都是使用 HTML 完成的 使用 jQuery 在玩游戏时进行动态更新 在某个地方 我认为在页面内使用元
  • p5.j​​s 中的碰撞处理

    我一直在使用 p5 js 并且已经弄清楚如何让对象来检测碰撞 但我对如何处理这些碰撞感到非常困惑 我尝试将玩家速度设置为 0 但随后玩家卡住了 我也尝试过将碰撞分开到每一侧 但这也不起作用 这是我的带有碰撞函数的玩家构造函数 class P
  • React CSS 模块的几个 CSS 文件

    我有2个相同的组件 它们的样式有点不同 所以我想重用通用样式 但不想为它们使用全局CSS 我该如何实现呢 import React from react import commonStylesfrom common table css im
  • 有没有在react-native中实现JavaScriptModule的指南?

    有兴趣直接实施native to javascript调用react native 但没有找到任何指南 请帮助提供一些在 React Native 中创建和注册本机 JavaScript 模块的示例 已经从官方那里找到了代码原生模块 and
  • 如何在 Oracle 的 SQLData.writeSQL() 中将 java.sql.Array 写入 java.sql.SQLOutput

    我已经实施了java sql SQLData为了使用 ojdbc6 将 UDT 对象绑定到准备好的语句 现在 我的一些 UDT 包含数组 我现在需要做的是 class MyType implements SQLData public voi
  • 批量:删除文件扩展名

    我有来自维基百科的以下批处理脚本 echo off for R C Users Admin Ordner f in flv do echo f pause 在 for 循环中 所有扩展名为 flv 的文件都会得到回显 但我想对文件进行一些操
  • 在 Perl 中对非常大的数字执行数学运算

    我遇到的情况是 数据文件中的某些值具有 64 位环绕 这使得它们非常大 例如 18446744073709551608 所以我必须对 2 64 进行减法 我用简单的方法尝试了这个 2 64 18446744073709551608 但我猜这
  • 从字符串创建 MySQL SET

    有没有办法在 MySQL 中从一串分隔值创建一个集合 例如 快速的棕色狐狸 gt 那个 快速 棕色 狐狸 一种没有位调整的逆 EXPORT SET Regards 如果您尝试在IN语句 您可以进行如下比较 而不是拆分字符串 SELECT F
  • 如何在 sp2013 中使用 REST api 将用户添加到共享点列表项用户字段?

    我有一个基本的共享点列表 其中包含人员字段 现在我尝试使用 REST API 添加新的列表项 并尝试将人员字段设置为我的别名 但它不起作用并引发以下错误 看起来我的用户数据传递方式有问题 但我无法在线找到任何帮助 你们能否帮助我们以正确的方
  • Spring引导登录到多个文件

    有什么方法可以根据配置将 Spring Boot 日志记录配置到多个文件 控制台 即某些日志语句应写入审核文件 而普通日志语句应写入控制台 普通日志文件 下面是我在 Spring Boot 示例应用程序上尝试过的代码 logback spr
  • 如何更改android中溢出菜单的背景颜色

    我想更改溢出弹出菜单的背景颜色以匹配主屏幕的背景 有谁知道我该怎么做 Thanks 如果您使用工具栏 首先需要将此行添加到工具栏布局中 app popupTheme style ThemeOverlay MyTheme 它应该看起来像这样
  • 日期时间可以为空吗?

    如何为可为空的日期时间创建 setter 和 getter 属性 例如 private DateTime mTimeStamp public DateTime TimeStamp get return mTimeStamp set mTim
  • PHP 检查日期是否是过去 30 天

    我这里有点问题 我将日期插入数据库 date last applied 我可以通过使用来调用它 row date last applied 当然 现在 我需要检查这个插入的日期是否是30 天前如果是 则执行一个操作 query SELECT
  • 在同一域上使用 nginx 为多个节点应用程序提供服务

    我想使用来自同一域的 nginx 托管 2 个不同的节点应用程序 但遇到了一些麻烦 我想拥有 mydomain com指向节点应用程序firstApp and otherapp mydomain com指向节点应用程序otherapp 现在
  • 删除指针和将其设置为 nullptr 之间有什么区别? [复制]

    这个问题在这里已经有答案了 正在说delete pointer and pointer nullptr相同 可能不会 但是后者会释放内存吗 关于什么delete pointer pointer nullptr pointer nullptr
  • “创建像 Flip3D 这样的应用程序”的 API 是什么?

    我试图弄清楚如何使用 DWM 将窗口的副本渲染到我自己想要的位置 我唯一能找到的告诉 DWM 在某处渲染的方法是使用缩略图 API 但MSDN的DWM 缩略图概述他们特别警告我 NoteDWM 缩略图不允许开发人员创建类似的应用程序 Win
  • ctor 和 setter 参数的命名约定

    对于那些命名成员变量时没有特殊符号的人 例如m foo or foo 如何为 ctor 和 setter 命名参数 到目前为止我尝试过的一些选项 Obj int foo foo foo void set foo int foo this g
  • 使用 JQuery 将表格单元格转换为文本框

    我有一个表 如下所示 table tbody tr th Name th th Value nbsp span style color Blue font size 6 Edit span th th Type th tr tr td st
  • 显式模板实例化 - 何时使用?

    休息几周后 我试图通过这本书来扩展和扩展我对模板的知识模板 完整指南由 David Vandevoorde 和 Nicolai M Josuttis 编写 我现在想要理解的是模板的显式实例化 我实际上对该机制本身没有问题 但我无法想象我想要