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

C++ 可变模板:每个模板参数一个方法,c++,variadic-templates,member-functions,C++,Variadic Templates,Member Functions,是否有一种方法可以自动为每个可变模板参数创建一个方法 例如,在下面的代码中,我想强制覆盖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(

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

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


#包括
#包括
#包括
甲级{
};
b类{
};
模板
t类{
公众:
虚空x(T&v)=0;
};
第一类:公共交通
{
};
int
main(int argc,char*argv[])
{
一,二,;
返回0;
}

不要将
t
作为可变模板,只需在单个类型上对其进行模板:

template <typename T>
class t {
public:
    virtual void x(T &v) = 0;
};
模板
t类{
公众:
虚空x(T&v)=0;
};
并像这样继承基类:

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

class i:public t.

您可以制作一个
t\u impl
来保存单个
t
的虚拟函数

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

但是要使
x()
在给定
t*
的情况下可用,您应该使用
declaration.Nice添加
。这比我建议的(用于编译)更有效。我们还应该注意,要么用户不能两次列出同一类型,要么我们需要在这里添加一些内容,以防止在这种情况下发生第二次继承…@Eugene Good call。代码修正了。@Elliott是的。添加带有来自的检查的静态断言应该可以解决这个问题。
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
};