给模板参数包起别名

2023-12-22

戏剧前

你好, 也许这个问题是重复的,但我对模板编程相对较新,实际上我找不到simple and 简短的解决方案(-> 只找到兆字节的“roxxor-模板-magic“我不明白)与我具体而简单的问题相匹配,所以我现在感觉有点迷失。

预先信息

我想使用“type_container”作为类的模板参数。容器是一个简单的结构体,它还应该包含一些模板参数包的 typedef.

问题:(与底部的示例相关)

如何在容器结构中定义和别名类型列表,以及如何访问它们并将它们转发到工厂类中所需的实体? (没有 boost,只有 C++11/14/17)

示例:(可以编译,如果我知道解决方案)

#include <map>
#include <vector>
#include <string>
#include <stack>

struct MY_TYPE_CONTAINER
{
    using TYPE_MAP            = std::map<int, int>;
    using TYPE_VECTOR         = std::vector<double>;
    using PARAMETER_PACK1 = //? -> ...T -> int, std::stack<int>, int
    using PARAMETER_PACK2 = //? -> ...T -> double, int, std::string
};

template <typename TYPES>
struct Factory
{
    typename TYPES::TYPE_MAP                       m_map;
    typename TYPES::TYPE_VECTOR                    m_vector;
    typename std::tuple<TYPES::PARAMETER_PACK1...> m_tuple;
    typename std::tuple<std::shared_ptr<TYPES::PARAMETER_PACK1>...> m_tuple2;
    void handlePack2(TYPES::PARAMETER_PACK2... args) { }
};


int main()
{
    Factory<MY_TYPE_CONTAINER> oStaticFactory;
    oStaticFactory.handlePack2(2.0, 1, "hi");
    return 0;
}

当前(最好的?)详细解决方案(可编译)(基于约翰·兹温克的回答)

#include <map>
#include <vector>
#include <string>
#include <stack>
#include <memory>

struct MY_TYPE_CONTAINER
{
    using TYPE_MAP                    = std::map<int, int>;
    using TYPE_VECTOR                 = std::vector<double>;
    using PARAMETER_PACK1             = std::tuple<int, std::stack<int>, int>;
    using PARAMETER_SHARED_PTR_PACK_1 = std::tuple<std::shared_ptr<int>, std::shared_ptr<std::stack<int>>, std::shared_ptr<int>>;
    using PARAMETER_PACK2             = std::tuple<double, int, std::string>;
};

template <typename TYPES>
class Factory
{
    typename TYPES::TYPE_MAP                    m_map;
    typename TYPES::TYPE_VECTOR                 m_vector;
    typename TYPES::PARAMETER_PACK1             m_tuple;
    typename TYPES::PARAMETER_SHARED_PTR_PACK_1 m_tuple2;

    void handlePack2Impl(typename TYPES::PARAMETER_PACK2 tup) {};

public:
    template <typename... Args>
    void handlePack2(Args... args) { handlePack2Impl(std::make_tuple(args...)); }
};

int main()
{
    Factory<MY_TYPE_CONTAINER> oStaticFactory;
    oStaticFactory.handlePack2(2.0, 1, "hi");
    return 0;
}

你实际上可以使用tuple:

using PARAMETER_PACK1 = std::tuple<int, std::stack, int>;
using PARAMETER_PACK2 = std::tuple<double, int, std::string>;

typename TYPES::PARAMETER_PACK1 m_tuple;

然后你就剩下一个问题——如何声明这样的东西:

void handlePack2(TYPES::PARAMETER_PACK2... args);

Perhaps:

void handlePack2Impl(typename TYPES::PARAMETER_PACK2 tup);

template <typename... Args>
void handlePack2(Args... args) { handlePack2Impl(std::make_tuple(args...)); }

欲了解更多想法,请从这里开始:元组到参数包 https://stackoverflow.com/questions/36612596/tuple-to-parameter-pack(但要注意,有模板元编程!

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

给模板参数包起别名 的相关文章

  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 我在使用 ado.net 时收到错误 Argument 2 may not be pass with ref keywords

    int t 0 cmd Parameters AddWithValue Res ref t 我在第二行收到错误 参数 2 不能与 ref 关键字一起传递 您只能通过引用传递参数ref if the 范围 is a ref参数也是如此 Add
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • 如何为未知长度的输入字符串分配内存?

    这是结构 typedef struct friend char firstname char lastname char birthdate 9 friend 我对如何让用户输入字符串并将其放置在friend结构为firstname or
  • SSIS 2012 未找到方法:无效

    最近 当我想打开 OLE DB 源组件时 我在每个 SSIS 包 使用 Visual Studio 2012 中都遇到此错误 Method not found Void Microsoft DataTransformationService
  • Mono / Ubuntu - 定义冲突

    我正在尝试在 Ubuntu 上构建一个库 Medsphere Widgets 但它抛出了一个错误 我已经进行了很好的搜索 但似乎没有人能找到答案 配置脚本工作正常 并且完成时没有警告或错误 当我去运行 make 时 它 会执行以下操作 po
  • 复制项目行为不一致?

    考虑这个目录结构 C temp A file txt C temp B 如果我运行命令 Copy Item C temp A C temp B A Recurse Force ErrorAction Stop I have C temp A
  • 如何在 Google Dialogflow Fullfilment 内联编辑器中安装 npm 包

    我想在我的聊天机器人中安装一些 npm 包 但我无法使其工作 package json 文件如下所示 name dialogflowFirebaseFulfillment description This is the default fu
  • 埃尔兰的哲学家餐厅

    如果您以前看过 哲学家就餐 那么您就会知道有几种方法可以做到这一点 我的实现创建了与消息传递进行通信的哲学家和分叉进程 我有很多关于分叉和哲学家进程格式的程序 但我自己弄清楚了 现在我将分享完成的代码 我是初学者仅供参考 祝你今天过得愉快
  • java构造函数有什么意义?

    所以我正在学习java 我已经一个月了 我刚刚了解了构造函数 但我不明白创建一个的全部目的 我为什么以及何时想要使用它 我的整体想法是它没有 main 方法 您可以从主类中调用构造函数 任何人都可以就这个话题启发我 这对我有很大帮助 构造函
  • PHP,通过POST传递数组

    这是通过以下方式发送数组的最安全的方式POST foreach id as array
  • 如何用斜杠“/”替换反斜杠“\”?

    在我的代码中我想替换反斜杠字符 通过正斜杠字符 在一个字符串中 我尝试过以下代码 string str chosen file Replace where chosen file is a string其中包含大量出现的 特点 但它似乎不起
  • 猕猴桃屏幕。我必须用 super 初始化吗?

    来自docs https kivy org docs api kivy uix screenmanager html Declare both screens class MenuScreen Screen pass class Setti
  • wsimport 不使用复杂的输入类型

    当我使用 wsimport 为某些服务生成代理时 每个端口的生成方法签名似乎没有使用 WSDL 中指定的复杂类型 但我注意到其他一些服务确实如此 多种服务都发生过这种情况 但最近的例子是亚马逊的 AWSEConsumerService 链接
  • 将 YUI3 与 HTTPS 结合使用的“正确”方法是什么?

    我对 YUI2 有丰富的经验 并且正在快速了解 YUI3 我正在编写的服务需要 HTTPS 但普通的 YUI 体验是从雅虎的 HTTP only CDN 加载的 当浏览器尝试将 HTTPS 页面与 HTTP javascript 混合时 它
  • 使用 javascript 设置响应头

    我在从应用程序中的 URL 收集 json 值时遇到问题 当我尝试获取它们时 控制台中会显示错误日志 指出 access control allow origin 不允许来源 我研究了一下 发现响应标头必须设置为 Access Contro
  • 在 iOS 5 中的地图上放置 CLPlacemark

    在 iOS 5 中 有一种转发地理编码地址的新方法 将 1 Infinite Loop CA USA 等地址转换为 lat lang 地址 有关此的更多信息请参见此处 http developer apple com library ios
  • 在 mac 中通过应用程序(.jar)读取/写入文件时出现权限被拒绝错误

    我在 swing 中创建了一个应用程序 还为同一应用程序创建了一个安装程序 安装程序和应用程序都可以在 Windows 系统上完美运行 但我的问题是 当我尝试在 mac os 中运行它时 它并不能完美地处理所有数据 我发现在我的应用程序中我
  • 在Hibernate的EmptyInterceptor中注入JPA的实体管理器

    我在数据访问层中使用 JPA 2 0 和 Hibernate 出于审计日志记录的目的 我通过在 persistence xml 中配置以下属性来使用 Hibernate 的 EmptyInterceptor
  • 向 Java 程序添加音乐/声音

    我正在制作一些迷你 java 游戏 我想知道如何向我的程序添加声音 音乐 我在 youtube 上观看了视频并按照提供的代码进行操作 但是出现以下错误 java io IOException 无法从输入流创建音频流 我注意到其他人用相同的代
  • 我应该在哪一层将两个实体连接在一起?

    我使用 Spring MVC 和常规 JDBC 我刚刚了解到我应该将业务流程分为表示层 控制器层 服务层和存储库 DAO 层 现在假设我有一个名为Person可以有多个Jobs Job它本身是另一个实体 有自己的属性 据我所知 存储库层仅管
  • 简单的数据触发器不起作用。为什么?

    我试图根据 bool 属性更改文本块的前景色 单击按钮时其值会更改 但是 由于某种原因 这不起作用 另外 我是否必须首先将 bool 属性添加到列表中 我尝试将 bool 属性直接添加到 DataContext 但这也不起作用 任何帮助 将
  • 给模板参数包起别名

    戏剧前 你好 也许这个问题是重复的 但我对模板编程相对较新 实际上我找不到simple and 简短的解决方案 gt 只找到兆字节的 roxxor 模板 magic 我不明白 与我具体而简单的问题相匹配 所以我现在感觉有点迷失 预先信息 我