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

问题描述

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

例如,在下面的代码中,我想被迫覆盖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;
}


解决方法

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...