【发布时间】:2021-09-30 23:29:05
【问题描述】:
是否可以在 C++ 中同时递归多个(在我的情况下为两个)参数包?怎么样?
为了更好地了解我的要求,我目前有一个类模板如下:
template<template<typename> class C, typename... Rest>
class Inherit {};
template<template<typename> class C, typename T, typename... Rest>
class Inherit<C, T, Rest...> :
public C<T>,
public Inherit<C, Rest...>
{
};
我在另一个类中使用这个类模板,它采用参数包Ts 让该类从模板化接口多次继承。例如:
template<typename T>
class Interface
{
...
};
template<typename... Ts>
class Example :
public Inherit<Interface, Ts...>
{
};
现在,我想做的是:
template<typename T, const char* N>
class Interface
{
...
};
template<typename... Ts, const char*... Ns>
class Example :
public Inherit<Interface, Ts..., Ns...>
{
};
我需要一个模板化的Inherit 类,它可以递归并同时从Ts 和Ns 参数包中挑选一个元素(假设参数包Ts 和Ns 具有相同的长度)。我对模板编程不够精通,不知道这是否可能?
【问题讨论】:
-
明确的继承链有什么意义?为什么不只是
template<template<typename> class C, typename... Rest> class Inherit : public C<Rest>... {};没有模板专业化? -
Inherit有一个typename... Rest。那只是类型除外。Inherit必须更改为看起来像template<template<typename> class C, typename T, typename... Rest, const char*... Ns>