variadic-templates相关内容

使用可变参数CRTP的智能指针工具包

我将要设计和实现一种智能指针工具包-一组用于定义各种类型的智能指针的类,例如unique_ptr,intrusive_ptr,shared_ptr,observing_ptr,tagd_ptr等.我没有可用的c ++库.我的想法是避免代码重复,使其遵循优雅的设计原则.让我描述一下我的想法. 设计注意事项:我想使用可变的CRTP方法来混合所需的指针功能,特征.对于每个功能集,都应该有一个特征类 ..
发布时间:2021-04-20 19:06:51 C/C++开发

在我的可变参数模板中获取UB,将可变数量的向量逐元素求和

我正在尝试创建一个函数 AddVector ,该函数明智地添加(可变)数量的vectors.我想我明白了,但是当我得到错误的输出时,我显然没有.我要添加三个双精度矢量,每个矢量的大小为5,包含1 + 2 + 1,因此我希望 4 4 4 4 4 我知道 1.36234e-316 2.0326e-316 4 4 4 显然是错误的(也许是未初始化的mem?) 我使用CppInsig ..
发布时间:2021-04-20 19:03:37 C/C++开发

递归可变参数模板的基本案例专业化

我的目标是定义一个 Recursive 类,该类以 int N 和一种或多种类型的 T,... Ts ,它的行为应类似于 std :: pair 与 类型为 T 的 N 个项目的 std :: array 作为 first 的 ,以及作为 second 的 可选 std :: vector 递归在相同的 N 上以及其余模板参数 Ts ... 上模板化的实例. 在尝试根据上述要求写下该 ..

创建从可变参数模板包派生的类型的元组

给定size_t值列表作为可变参数模板参数包,如何根据参数包使元类型的派生类型(例如Matrix)组成元组,使得可变参数的第n个元素生成矩阵 .例如: make_matrix_tuple()== make_tuple(矩阵2,3,矩阵3,4,矩阵4,5); 如何编写带有size_t参数包的make_matrix_tuple函数? 通过派生的类型 ..

如何在C ++ 17中创建从可变参数模板推导的向量类型的元组?

我实现了一个收集类,该收集类将元组的向量转换为向量的元组(本质上是AOS到SOA的转换).此代码适用于两个模板类的示例.我试图通过使用可变参数模板使其更通用.为此,我需要为成员变量 m_col 创建类型.在C ++ 17中,是否可以将元组转换为向量的元组?因此,此示例中的成员方差 m_col 的类型将根据模板类型自动生成. template类集合{std :: tuple ..

我可以使用折叠表达式实现max(A,max(B,max(C,D)))吗?

在尝试使用C ++ 17折叠表达式时,我尝试实现max sizeof ,其中结果是类型的 sizeof 的最大值.我有一个使用变量和lambda的丑陋折叠版本,但是我无法想到一种使用折叠表达式和 std :: max()来获得相同结果的方法. 这是我的折叠版本: templateconstexpr size_t max_sizeof(){size_t m ..
发布时间:2021-04-20 18:58:44 C/C++开发

如何编写带有可选返回值的包装函数的Lambda

我试图编写一个lambda来度量任意函数的执行时间.在很多帮助下,我已经针对C ++ 14和具有返回值的函数进行了管理,请参见 如果使用C ++ 11编译器(例如带有-std = gnu ++ 11的g ++)进行编译,则它将使用模板函数,因此在这里可以很好地工作.如果使用C ++ 14编译器(-std = gnu ++ 14)进行编译,它将使用lambda,因此出现以下编译错误消息: ..
发布时间:2021-04-20 18:57:11 C/C++开发

映射可变参数模板参数

在下面的代码中,我想找到一种更通用的调用GenericPublish__Advertise()的方式,该方式需要一个可变的模板列表.我该怎么做才能改善它? 我想将主题映射到特定类型的发布者: topic [0]->发布者[0] topic [1]->发布者[1] 如此 虽然代码可以正常工作,但我需要手动编写GenericPublish__Advertise()的模板版本,并手 ..
发布时间:2021-04-20 18:54:42 C/C++开发

可变参数模板对象乘法

在下面的代码中,我正在为int值和对象做乘法可变参数模板.它适用于所有原始类型.它也仅适用于2个对象.但是,当我使用两个以上的自变量对象相乘时,代码不会编译. multiply(1、2、3、4、5、6)//正确运行乘法(A(1),B(1))//正常工作乘法(A(1),B(1),B(1));//编译时错误乘法(A(1),B(1),B(1),B(1));//编译时错误 对于2个以上的对象乘法, ..
发布时间:2021-04-20 18:52:54 C/C++开发