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