多个参数包的同时递归

Nic*_*len 6 c++ templates

在 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...>
{
};
Run Code Online (Sandbox Code Playgroud)

我在另一个类中使用这个类模板,该类采用参数包Ts让该类从模板化接口多次继承。例如:

template<typename T>
class Interface
{
    ...
};

template<typename... Ts>
class Example :
    public Inherit<Interface, Ts...>
{
};
Run Code Online (Sandbox Code Playgroud)

现在,我想做的是:

template<typename T, const char* N>
class Interface
{
    ...
};

template<typename... Ts, const char*... Ns>
class Example :
    public Inherit<Interface, Ts..., Ns...>
{
};
Run Code Online (Sandbox Code Playgroud)

我需要一个模板类,它可以递归并立即从和参数包Inherit中选取一个元素(假设参数包和具有相同的长度)。我对模板编程不够熟悉,不知道这是否可能?TsNsTsNs

Jar*_*d42 0

template <typename... Ts, const char*... Ns> class Example;是错的。

你可能想要类似的东西(无递归)

template<typename T, const char* N>
class Interface 
{
    // ...
};

template<typename T, typename Names> class Example;

template<typename... Ts, const char*... Ns>
class Example<std::tuple<Ts...>, std::integer_sequence<const char*, Ns...>> :
    public: Interface<Ts, Ns>...
{
};
Run Code Online (Sandbox Code Playgroud)

Interface<Ts, Ns>...要求两个包具有相同的尺寸。