如何编译此代码?
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());
using 在C++17中添加了参数包,因此您的代码 would just work in C++17 .
using
作为C++14的变通方法,可以使用递归。 The proposal for using... 演示了如何执行此操作:
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; };
On Godbolt
如果愿意,可以实现对数递归深度。