是否有可能在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
具有相同的长度)。我不精通模板编程,知道如果这是可能的吗?
根据您给出的示例,我认为您不需要这个Inherit
类模板。下面是我写第一个例子的方式:
template<typename T>
class Interface
{
...
};
template<typename... Ts>
class Example : public Interface<Ts>...
{
};
和第二个例子:
template<typename T, const char* N>
class Interface
{
};
template<typename, const char*...>
class Example;
template<typename... Ts, const char*... Ns>
class Example<std::tuple<Ts...>, Ns...> : public Interface<Ts, Ns>...
{
};
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>...
{
};
Interface<Ts, Ns>...
要求两个包的大小相同。