(1) Base
template <typename...>
class Base;
(2) ,
template <typename First, typename... Rest>
class Base<First, Rest...> : public Base<Rest...> {
public:
using Base<Rest...>::func;
void func(First object) {
}
};
(3) (4)
template <>
class Base<>
{ public: void func () {} };
( ) func() : ( - func) using Base<Rest...>::func;.
.
#include <iostream>
template <typename...>
class Base;
template <typename First, typename... Rest>
class Base<First, Rest...> : public Base<Rest...> {
public:
using Base<Rest...>::func;
void func(First object)
{ std::cout << "func() recursive" << std::endl; }
};
template <>
class Base<>
{ public: void func () {} };
struct X {};
struct Y {};
struct Z {};
class Derived : public Base<X, Y, Z> {};
int main()
{
Derived d;
d.func(X{});
d.func(Y{});
d.func(Z{});
}