问题描述
例如,在下面的代码中,我想被迫覆盖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。