C++ 复合模板类工厂

2024-01-31

是否可以制作一个复合模板类工厂而无需手动指定所有组合?我的意思是如果我有这些课程:

class CompositeBase {};

template< typename C1, typename C2, typename C3 >
class Composite : public CompositeBase
{
private:
    C1 component1;
    C2 component2;
    C3 component3;
};

class Component0 {}; //Also have Component1-9

我想创建一个这样的函数:

CompositeBase *CreateComposite(int c1, int c2, int c3);

so that

CreateComposite(4,3,7);

将创建并返回一个

Composite<Component4,Component3,Component7>

这样做的原因是我可以从文件加载数据并创建不同的复合对象。该文件将包含用于创建每个复合对象的组件的三个值,然后是它所需的其他数据。

问题是对于 10 个不同的组件,有 1000 个不同的可能的复合类。要指定所有这些,需要为第一个组件使用一个 switch 语句,为该组件中的第二个组件使用 10 个 switch 语句,为这 10 个组件中的第三个组件使用 100 个 switch 语句,并且该函数的长度将超过 1000 行。

还有其他方法可以编写 CreateComposite 函数吗?除了这个:

CompositeBase *CreateComposite(int c1, int c2, int c3)
{
   switch(c1)
   {
   case 0:
       switch( c2 )
       {
       case 0:
           switch( c3 )
           {
              case 0: return new Composite<Component0,Component0,Component0>;
              case 1: return new Composite<Component0,Component0,Component1>;
              //etc
           }
           //etc
       }
       //etc
   }
}

模板参数必须在编译时已知。一个可能的解决方案是:CreateComposite<int, int, int>()您可以针对每种可能的情况进行专门化。哦,好吧:那是不行的.. 我建议你宁愿使用一些老式的动态多态性和std::vector<ComponentBase>.

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

C++ 复合模板类工厂 的相关文章

随机推荐

  • 找到不是直接来自我的代码的托管异常的来源?

    如果这确实是一个超级用户问题 我提前道歉 我只是不确定 但这似乎更多地取决于开发人员 方面而不是技术支持方面 这不一定是问题 但它确实让我对我的系统彻底抓狂 它也只发生在我的电脑上 当我启动任何应用程序时 即使是空白的 WPF 应用程序 我
  • 我可以限制 AWS Lambda 的并发调用吗?

    我有一个 Lambda 函数 该函数由对 S3 存储桶的 PUT 操作触发 我想限制此 Lambda 函数 使其一次仅运行一个实例 我不希望两个实例同时运行 我浏览了 Lambda 配置和文档 但没有看到任何明显的内容 我可以编写自己的锁定
  • 并行 linq 中的 let 子句是否强制并行计算?

    在 xamarin iOS 网站上有以下并行 linq 示例 from item in items AsParallel let result DoExpensiveWork item select result 这个可以不写吗 from
  • QnA 机器人无法正确显示表格格式

    我的 QnA 制造商知识库当前由 pdf 文件训练 http download microsoft com download 2 9 B 29B20383 302C 4517 A006 B0186F04BE28 surface pro 4
  • 更改 Laravel 刀片分隔符

    我知道您可以使用以下命令更改默认刀片分隔符 Blade setEscapedContentTags Blade setContentTags 但是我不知道应该把它放在哪里 这样它只会影响单个刀片模板 而不是把它放在app start glo
  • 类成员——Java 与 Python

    我现在从 Java 开始学习 Python 我尝试理解Python中类成员的概念 下面是一个 Java 示例程序 class Hello int x 0 void ex x 7 public static void main String
  • Fancybox 无法处理来自 Twitter API 的图像

    使用 Fancybox 2 下面的示例可以完美运行 省略其他代码 a class fancybox href https si0 twimg com profile images 2169856486 avatar jpg title so
  • 如何读取 Micronaut 中的应用程序属性?

    我使用指南将 AWS SES API 集成到我的 Micronaut Groovy 应用程序中在 micronaut 中发送邮件 http guides micronaut io micronaut email groovy guide i
  • 在 C++ 构造函数中分配内存的正确方法是什么?

    这是通过分配内存的正确方法new在 C 构造函数中 参数列表中的第一种方式 class Boda int memory public Boda int length memory new int length Boda delete mem
  • 用于左包装字节元素的高效 sse shuffle mask 生成

    使用 sse 优化以下代码的有效方法是什么 uint16 t change1 uint8 t pSrc uint8 t pDest if change1 0x0001 pDest pSrc 0 if change1 0x0002 pDest
  • 如何从保存的 XGBoost 模型获取参数

    我正在尝试使用以下参数训练 XGBoost 模型 xgb params objective binary logistic eval metric auc lambda 0 8 alpha 0 4 max depth 10 max delt
  • 闪亮降级fontawesome 5至4

    我正在做一个与 fontawesome 4 7 非常相关的闪亮项目 它给我们带来了巨大的价值 作为 fontawesome 的免费用户 我认为升级到 5 3 1 没有任何优势 许多免费图标变得更加丑陋 粗糙 并且必须付费购买专业版才能获得类
  • Windows 8 上的 Visual Studio 2008/2010 - 问题?

    我正在寻找有关在 Windows 8 x64 上使用 Visual Studio 2008 和 2010 的问题所提供的任何信息 我已经找到了以下内容article http support microsoft com kb 2735834
  • 结合网格/包 Tkinter

    我知道过去关于网格和包有很多问题 但我只是不明白如何将两者结合起来 因为我在两个方向 行 列 扩展我的 表格 时遇到困难 我希望按钮保持相同的大小 但始终位于窗口底部 然而 我希望通过调整窗口大小来自动扩展 表格 但似乎无法使其工作 将 w
  • iOS 中的 Crashlytics 无法继续执行 Fabric 应用程序中的“构建您的项目”

    我正在为我的 iOS 应用程序安装 Crashlytics 我通过他们的网站链接下载了它 并完成了集成框架 添加运行脚本等的所有步骤 我遇到了问题 因此我删除了框架并决定重新开始并尝试全新安装 但是 Fabric 应用程序更新到了较新的版本
  • 解析推送通知:发生另一个错误

    自从昨晚用 Parse 测试以来 我遇到了一个奇怪的问题 我能够很好地发送推送通知 但现在当我通过在线解析推送通知工具发送推送通知时 我的推送通知都没有被发送 Edited好吧 看来这只是本地环境的问题 当我测试推送通知到通过试飞安装的测试
  • 拥有.apk可以提取其源代码。 Android 应用程序安全吗? [复制]

    这个问题在这里已经有答案了 我开发 Android 应用程序 其中一些代码非常私密和机密 我将加密算法放入我的代码中以提高安全性 但最近我读到 当人们拥有 apk 文件时 他们可以 100 正确地提取 java 源代码Source http
  • 为什么我的 Trie 查找比标准 F# Map 的查找慢?

    所以 我只是从 OCaml 移植了 Trie 不幸的是 就 tryFind 而言 它的运行速度比标准 Map 慢 我不明白这一点 特里树似乎应该更快 F 的代码库是否以某种特殊方式构建 以使它们比用户通常部署的代码更快 这是代码
  • XSD 指定在 XML 中只能使用一次的属性

    拥有一个具有多个属性的复杂类型
  • C++ 复合模板类工厂

    是否可以制作一个复合模板类工厂而无需手动指定所有组合 我的意思是如果我有这些课程 class CompositeBase template lt typename C1 typename C2 typename C3 gt class Co