在多个参数包上同时递归

  • 本文关键字:递归 参数 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...>
{
};

我在另一个类中使用这个类模板,该类接受参数包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类,它可以递归并一次从TsNs参数包中选择一个元素(假设参数包TsNs具有相同的长度)。我不精通模板编程,知道如果这是可能的吗?

根据您给出的示例,我认为您不需要这个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>...要求两个包的大小相同。

相关内容

  • 没有找到相关文章

最新更新