Jak mogę curry różne szablony szablonów szablonów?

Parametry szablonu szablonu Variadic przyjmują dowolny szablon:

template<typename T>
struct Test1 {
    using type = int;
};

template<typename T, typename T1>
struct Test2 {
    using type = char*;
};

template<template<typename...S> class BeCurry>
struct Currying {
};

using curry  = Currying<Test1>;
using curry2 = Currying<Test2>;

Chcę klasę szablonów Currying.
Oznacza to, że jeśli parametr przyjmuje jeden parametr szablonu jakoTest1, curry::apply<T>::type get Test1<T>::type. Jeśli parametr akceptuje dwa parametry szablonu jakoTest2, curry2::apply<T0> jest szablonem „częściowym”,curry2::apply<T0>::apply<T1>::type get Test2<T0,T1>::type

Czy to możliwe do wdrożenia? Ponieważ nie mogę zapytać o liczbę parametrów wewnętrznych parametrów szablonu szablonu:

template<template<typename... S> class BeCurry>
struct Currying {
    enum { value = sizeof...(S) }; // error!
};

questionAnswers(2)

yourAnswerToTheQuestion