模板类的不同专业化的向量

2023-12-30

由于我一直在 C++ 中使用模板,所以经常遇到这个问题:我想在向量中收集模板类的不同版本的实例。

我知道这不可能直接实现,但我想知道是否有一些解决方法可以实现这一点。

例如,如果我有这样的模板化类:

enum test_e
{
  TYPE_A,
  TYPE_B
};

template <test_e TYPE>
class test
{
  void doSomething()
  {
    switch (TYPE)
    {
      ...
    }
  }
};

我想建立一个向量,我可以在其中推动两个专业化(TYPE_A & TYPE_B) 班级的test.

执行此操作的最佳方法是什么?


如果要存储不同的模板类,可以创建一个父类,并在模板类中继承该类。

我不知道你为什么使用switch对于类型,只需使用模板实例化。

#include <iostream>
#include <vector>

using std::cout;
using std::endl;


class Mother {
public:
    virtual void doSomeThing() = 0;
};

template<typename T>
class Child : public Mother {
    void doSomeThing() override;
};

template<typename T> void Child<T>::doSomeThing() {
    cout << "Base Function" << endl;
}
template<> void Child<int>::doSomeThing() {
    cout << "Int template" << endl;
}

template<> void Child<float>::doSomeThing() {
    cout << "Float template" << endl;
}

int main() {

    std::vector<std::unique_ptr<Mother>> vec;

    vec.emplace_back(new Child<double>());
    vec.emplace_back(new Child<int>());
    vec.emplace_back(new Child<float>());

    vec[0]->doSomeThing();
    vec[1]->doSomeThing();
    vec[2]->doSomeThing();


    return 0;
}

output:

Base Function
Int template
Float template

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

模板类的不同专业化的向量 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • webpack 创建 CSS 组件范围

    我目前正在学习如何使用 webpack 并且在 CSS 文件方面遇到了一些困难 基本上 我使用 AngularJs 1 5 和 TypeScript 创建两个组件 它们每个都有一个模板 其中包含带有 button 类的 div 元素 每个组
  • onClick 使用 jQuery .animate 转到页面底部

    我有一个表 其中最后一列包含操作按钮 可在表下打开另一个部分 当该部分打开时 正文页面保留在按下操作列中的按钮的位置 我需要使用 jQuery 最好使用 animate 它将 html 页面滚动到表格下打开的部分 小提琴示例 http js
  • 如何在PHP中输出简单的ascii表?

    我有一些数据 例如 Array 0 gt Array a gt largeeeerrrrr b gt 0 c gt 47 d gt 0 1 gt Array a gt bla b gt 1 c gt 0 d gt 0 2 gt Array
  • 在 VB6 IDE 中工作时卸载 COM 控件

    我日常工作的一部分是维护和扩展遗留的 VB6 应用程序 通用引擎是用 C C 编写的 VB6 使用这些函数来提高性能 当谈到异步编程时 C 接口是不够的 我们依靠 COM 控件来向 VB6 触发事件 我的问题是 当我在 VB6 中注册该控件
  • 如何区分缺少的反序列化字段和空字段?

    我想用Serde https serde rs 将一些 JSON 解析为 HTTP PATCH 请求的一部分 由于 PATCH 请求不传递整个对象 仅传递要更新的相关数据 因此我需要能够区分未传递的值和显式设置为的值null 以及存在的值
  • 使用 Office 365 登录/凭据作为单点登录

    我可以使用 Office 365 登录 凭据作为单点登录吗 实际上 我需要使用 Office 365 登录详细信息登录我的 Web 应用程序 此外 我想在我的 Web 应用程序中使用以下 url 凭据进行单点登录 https portal
  • 通用相关类型可能寿命不够长

    采取以下示例 feature generic associated types allow incomplete features trait Produce type CustomError lt a gt fn produce lt a
  • 为什么 UINavigationBar 背景图像重复?

    图像尺寸为 640 X 44 适用于 iPad 肖像 由于某种原因 它显示为图案图像而不是拉伸的 iOS 6 尝试以下方法来拉伸图像 load the background image navbar png UIImage imageNav
  • Laravel 5.4,重命名用户表列

    所以今天我尝试修改我的 laravel 项目中的默认身份验证 首先 Composer 1 4 2 和 Laravel 5 4 27 也意味着所有依赖项 都是最新的 我用以下方法验证了这一点 composer self update comp
  • 专为 iOS7 设计的 Storyboard 在 4 英寸设备上的 iOS 6 上无法全屏显示

    我正在设计我的 iPhone 应用程序storyboard and auto layout 一切正常iOS 7在 4 英寸和 3 5 英寸设备上 On iOS 6 1该应用程序始终在 3 5 英寸设备上运行 即使在 4 英寸设备上运行 也会
  • kubernetes pod 内存 - java gc 日志

    在 kubernetes 仪表板上 有一个 pod 其中内存使用情况 字节 显示为904 38Mi 该 Pod 包含运行的 Java 应用程序 Xms512m Xmx1024m 以及 kubernetes 部署文件 gt requests
  • 动画 CALayer 背景颜色并更新模型值

    我想要制作动画backgroundColor更改我的 UIView 中的子层 在tintColorDidChange 我需要多次从图层的当前背景颜色到新的色调颜色进行动画处理 每次使用不同的色调颜色 因此背景颜色的模型值需要更新 我不能使用
  • 如何在兼容浏览器的 JavaScript 中撤消和重做事件?

    我有一个 T 恤定制设计软件工具 必须为可拖动的文本添加重做和撤消事件 http wordpress tshirtecommerce com design online product id 17 http wordpress tshirt
  • PDF 文本和坐标解析 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在使用 PDF Box 来解析 pdf 并试图弄清楚如何检索有关文本的数据 例如字体 粗体 大
  • 除非以管理员身份运行,否则 stack ghci 无法加载 pthread

    当我跑步时stack ghci在一个全新的项目上 它无法加载 stack new repro simple Downloading template simple to create project repro in repro 省略附加输
  • Spark 2.2.0 - 如何将 DataFrame 写入/读取 DynamoDB

    我希望我的 Spark 应用程序从 DynamoDB 读取表 执行操作 然后将结果写入 DynamoDB 将表读入 DataFrame 现在 我可以将表从 DynamoDB 读入 SparkhadoopRDD并将其转换为 DataFrame
  • 为什么编译器将此变量初始化为错误的值?这是对齐问题吗?

    我正在使用嵌入式 C 编译器 ARM cortex m3 芯片 它似乎将错误的值初始化为结构 为什么会出现这种情况 如果是对齐问题 编译器不应该知道将 int32u 与 4 字节边界对齐吗 注意 printf 只是将字节从串行端口中抛出 该
  • 公证节点查询数据和普通节点查询交易

    我有一个关于查询数据的问题 Corda中有没有办法查询公证节点存储的所有数据以及如何查询其他节点中的交易 在 Corda 中 每个节点都有自己的数据库支持 该数据库仅存储节点知道的交易 出于隐私原因 节点无法查询其他节点的数据库 相反 您必
  • Wordpress 上出现错误“您无权将文件附加到此帖子”

    When non admin users upload media They get the following error 我检查过的事情 wp content uploads 及其所有子文件夹的权限为 755 Core capabili
  • 模板类的不同专业化的向量

    由于我一直在 C 中使用模板 所以经常遇到这个问题 我想在向量中收集模板类的不同版本的实例 我知道这不可能直接实现 但我想知道是否有一些解决方法可以实现这一点 例如 如果我有这样的模板化类 enum test e TYPE A TYPE B