如何拥有多个参数包

How to have multiple parameter packs

本文关键字:参数 拥有 何拥有      更新时间:2023-10-16

假设我有一个类List:

template<class... items>
class List;

这实际上只是一个粘贴大量参数并为其命名的地方。

我真正想要的是以某种方式将两个List合并在一起。

尝试:

template<class First,class Second>
struct Merge { };
template<template<class...> class First,template<class...> class Second,class... FirstItems,class... SecondItems>
struct Merge<First<FirstItems...>,Second<SecondItems...> >{
  typedef List<FirstItems...,SecondItems...> value;
};

但这会失败,因为不能在一个模板中包含两个参数包。

那么我该怎么做呢?

在编写涉及模板的代码时,请确保每个打开的<都包含关闭的>,否则您的代码将无法编译。

您可能会想编写一个正则表达式来确保您的代码具有此属性。不要:这是不可能的。c++编译器会很高兴地向您提供一条关于缺少>的错误消息,通常是在一个易于阅读的"第77行的<未关闭"中。

不用说,您的代码(一旦添加了缺少的>)编译得很好。