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

时间:2020-10-28 20:24:45

标签: c++ variadic-templates member-functions

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

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

#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;
}


2 个答案:

答案 0 :(得分:4)

您可以制作一个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
};

答案 1 :(得分:1)

与其将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

相关问题