3

如何让这段代码编译?

struct type1 {};
struct type2 {};

struct handler1
{
    void handle(type1){}
};

struct handler2
{
    void handle(type2){}
};

template <typename... Handlers>
struct TheHandler : Handlers...
{
    using Handlers::handle...; // DOESN'T COMPILE
};

TheHandler<handler1, handler2> handler;
handler.handle(type1());
4

1 回答 1

3

usingwith parameter packs 是在 C++17 中添加的,因此您的代码只能在 C++17中运行。

作为 C++14 的解决方法,您可以使用递归。提案using...展示了如何做到这一点:

template <typename Handler0, typename... Handlers>
struct TheHandler : Handler0, TheHandler<Handlers...>
{
    using Handler0::handle;
    using TheHandler<Handlers...>::handle;
};

template <typename Handler>
struct TheHandler<Handler> : Handler
{
    using Handler::handle;
};

在神螺栓上

如果您愿意,可以实现对数递归深度。

于 2017-10-17T00:53:54.463 回答