如何通过嵌套在通过参数包实例化的类模板中的可变参数别名模板作为模板模板参数传递?

时间:2020-02-06 16:34:18

标签: c++ templates variadic-templates template-meta-programming template-templates

我希望下面的例子比标题更容易混淆!

假设我们有一些元功能; TraitReversePartial(将参数包中的类型绑定到可变参数类模板的背面)和Test接收器(接受接收的别名模板)。

template<typename, typename...>
struct Trait : std::true_type {};

template<template<typename...> typename Template, typename... Ts>
struct ReversePartial
{
    template<typename... Us>
    using Apply = Template<Us..., Ts...>;
};

template<template<typename...> typename>
struct Test {};

为什么在明确指定要应用的类型时能够编译

using T = Test<ReversePartial<Trait, int, double>::Apply>; // compiles

但是通过参数包传递它们时不是吗?

error: template argument for template template parameter must be a class template or type alias template

template<typename... Ts>
using U = Test<ReversePartial<Trait, Ts...>::Apply>; // does not compile

是否有解决此问题的方法?

Try on Compiler Explorer

0 个答案:

没有答案