拆分可变参数模板参数以用作其他 类 的单个模板参数

Split variadic template params up to use as single template parameters for other classes

我正在尝试弄清楚如何为 class 提供任意模板参数,然后让 class 使用这些参数中的每一个来实例化低音 class。沿着这些线的东西:

template<class T>
SingleParamClass;

template<class ... TYPE_LIST>
MultiParamClass : SingleParamClass<TYPE_LIST[0]>, SingleParamClass<TYPE_LIST[1]>... SingleParamClass<TYPE_LIST[N]>;

为了演示目的,我已经在参数包中编写了索引。

我知道如何解压类型列表,但不知道如何以我可以使用它的方式解压它。

编辑:

根据要求,我将扩展我正在尝试做的事情...

我想创建一个子class,它使用可变参数模板参数中的类型构造一系列纯虚方法。这些纯虚方法供另一个组件调用,同时强制开发人员在派生的 class.

中实现这些方法

在 C++ 以我想要的方式神奇地工作的世界里,我会做这样的事情:

template<class ... TYPE_LIST>
MultiParamClass {

    virtual void func(TYPE_LIST[0] arg) = 0;
    virtual void func(TYPE_LIST[1] arg) = 0;
    ...
    virtual void func(TYPE_LIST[N] arg) = 0;

}

我不知道如何做到这一点,所以我正在尝试使用 subclasses 找到绕过它的方法,如下所示:

template<class T>
SingleParamClass {
    virtual void func(T arg) = 0;
}

template<class ... TYPE_LIST>
MultiParamClass : SingleParamClass<TYPE_LIST[0]>, SingleParamClass<TYPE_LIST[1]>... SingleParamClass<TYPE_LIST[N]>;

您可以像这样扩展参数包:

template<class T>
struct SingleParamClass {};

template<class ... TYPE_LIST>
struct MultiParamClass : SingleParamClass<TYPE_LIST>... {};

也许试试这样的方法:

template<class T>
class SingleParamClass
{
public:
    virtual void func(T arg) = 0;
};

template<class... TYPE_LIST>
class MultiParamClass : public SingleParamClass<TYPE_LIST>...
{
};

class MyMultiParamClass : public MultiParamClass<int, double, string>
{
public:
    void func(int arg) override { ... }
    void func(double arg) override { ... }
    void func(string arg) override { ... }
};

Online Demo