具有递归继承和使用声明的可变参数模板

air*_*ris 4 c++ templates variadic-templates c++11

我想做一些类似于下面的代码的事情,只是我不想实现func()两次,因为它会是相同的实现。你有什么建议如何实现这一点吗?

template <typename First, typename... Rest>
class Base : public Base<Rest...> {
public:
    using Base<Rest...>::func;
    void func(First object) {
        // implementation
    }
};

template <typename First>
class Base<First> {
public:
    void func(First object) {
        // implementation
    }
};

struct X {};
struct Y {};
struct Z {};

class Derived : public Base<X, Y, Z> {};

// ...

Derived d;
d.func(X{});
d.func(Y{});
d.func(Z{});
Run Code Online (Sandbox Code Playgroud)

And*_*dyG 5

使用多重继承和附加using指令:

template <typename First, typename... Rest>
struct Base : Base<First>,  Base<Rest...> {
    using Base<First>::func;
    using Base<Rest...>::func;
};

template <typename First>
struct Base<First> {
    void func(First object) {/*...*/}
};
Run Code Online (Sandbox Code Playgroud)

现场演示 (C++11)