可变参数模板:每个模板参数一个方法
Variadic templates: One method per template argument
有没有办法为每个可变模板参数自动创建一个方法?
例如,在下面的代码中,我想强制覆盖 class 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;
}
与其将 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。
您可以创建一个 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
};
有没有办法为每个可变模板参数自动创建一个方法?
例如,在下面的代码中,我想强制覆盖 class 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;
}
与其将 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。
您可以创建一个 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
};