实例化模板参数的参数包
Instantiating a parameter pack of template parameters
我想制作一个模板,该模板采用一组模板并使用相同的参数包实例化它们。
不幸的是,我似乎无法弄清楚如何在模板参数包中扩展参数包。
如何进行编译?
#include<type_traits>
#include <tuple>
template <template <typename...> typename... Args>
struct TupleTupleMaker
{
template <typename... InstantiateWith>
using NewTupleTuple = typename std::tuple<Args<InstantiateWith...>...>;
};
template<typename a, typename b>
using tuple1 = std::tuple<int,a,b>;
template<typename a, typename b>
using tuple2 = std::tuple<a,b,b>;
using expected = std::tuple<
std::tuple<int,int,double>,
std::tuple<int,double,double>>;
using actual = TupleTupleMaker<tuple1,tuple2>::NewTupleTuple<int,double>;
static_assert(std::is_same_v<actual,expected>, "Should be same");
根据核心问题 1430 的方向,您无法将扩展打包到具有固定参数列表的别名模板中。解决方法是通过类模板路由tuple1
和tuple2
重写它们:
template<class a, class b>
struct tuple1_impl { using type = std::tuple<int,a,b>; };
template<typename... a>
using tuple1 = typename tuple1_impl<a...>::type;
template<class a, class b>
struct tuple2_impl { using type = std::tuple<a,b, b>; };
template<typename... a>
using tuple2 = typename tuple2_impl<a...>::type;
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 如何在模板函数中实例化其长度使用模板参数的数组
- 函数在可变参数模板的实例化期间不可见
- 实例化模板时,我是否必须显式显示参数包中的类型?
- 从模板参数包实例化的访问类实现
- C++ 可变参数模板实例化深度超过最大值 900
- 与参数匹配的友元模板函数实例化
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 在编译时检查未实例化的类模板是否继承自其第一个模板参数
- 如何将包装作为模板参数实例化专用模板类
- 如何在 c++ 中使用枚举参数实例化对象
- 使用NULL参数实例化模板类
- 使用模板参数实例化模板类
- 使用bool非类型参数实例化类模板时出错
- 从类别上防止或阻止使用特定参数实例化对象
- 如何用不同的参数实例化类
- 模板是否为相同类型的参数实例化多次
- C++:根据一个参数实例化一个模板化的类
- 用Constructor参数实例化类对象和不带参数C++的*运算符之间的区别