可变参数模板:每个模板参数一个方法

Variadic templates: One method per template argument

有没有办法为每个可变模板参数自动创建一个方法?

例如,在下面的代码中,我想强制覆盖 class i 中的 void x(a &v)void x(b &v):

#include <type_traits>
#include <stdlib.h>
#include <stdio.h>

class a {
};

class b {
};

template <typename ...T>
class t {
public:
    virtual void x(T &v) = 0;
};

class i : public t<a, b>
{
};

int
main (int argc, char *argv[])
{
    i ii;
    return 0;
}


与其将 t 设为可变参数模板,不如将其模板化为单一类型:

template <typename T>
class t {
public:
    virtual void x(T &v) = 0;
};

并像这样继承基础 类:

class i : public t<a>, t<b>
{
    virtual void x(a &v) {}
    virtual void x(b &v) {}
};

这是一个demo

您可以创建一个 t_impl 来保存单个 T 的虚函数,例如

template <typename T>
class t_impl
{
public:
    virtual void x(T &v) = 0;
};

然后 t 会像

那样继承它
template <typename ...T>
class t : t_impl<T>... // can use public, protected or private inheritance
{
public:
    using t_impl<T>::x...; // used to import t_impl<T>::x into the public space
    // any additional common members
};