История изменений
Исправление Kuzy, (текущая версия) :
Если второй аргумент определить через шаблонный тип, все должно получиться, но мне в конечном счете хочется получить синоним (typedef или еще как) типа такой функции, а там шаблоны вроде как не сработают.
Ты хочешь генерить тип этой функции? Он должен когда-то заканчиваться, или функции должны генериться в зависимости от переданных аргументов?
Это норм?
template <typename S, typename R, typename... Args>
struct get_rec {
using type = std::function<R(Args..., S)>;
using next = get_rec<type, R, Args...>;
};
template <typename R, typename... Args>
struct rec_start {
using type = std::function<R(Args...)>;
using next = get_rec<type, R, Args...>;
};
-> rec_start<void, int>::type
std::function<void (int)>
-> rec_start<void, int>::next::type
std::function<void (int, std::function<void (int)>)>
-> rec_start<void, int>::next::next::type
std::function<void (int, std::function<void (int, std::function<void (int)>)>)>
-> rec_start<void, int>::next::next::next::type
std::function<void (int, std::function<void (int, std::function<void (int, std::function<void (int)>)>)>)>
Исходная версия Kuzy, :
Если второй аргумент определить через шаблонный тип, все должно получиться, но мне в конечном счете хочется получить синоним (typedef или еще как) типа такой функции, а там шаблоны вроде как не сработают.
Ты хочешь генерить тип этой функции? Он должен когда-то заканчиваться, или функции должны генериться в зависимости от переданных аргументов?
Это норм?
template <typename S, typename R, typename... Args>
struct get_rec {
using type = std::function<R(Args..., S)>;
using next = get_rec<type, R, Args...>;
};
template <typename R, typename... Args>
struct rec_start {
using type = std::function<R(Args...)>;
using next = get_rec<type, R, Args...>;
};
-> rec_start<void, int>::type
std::function<void (int)>
-> rec_start<void, int>::next::type
std::function<void (int, std::function<void (int)>)>
-> rec_start<void, int>::next::next::type
std::function<void (int, std::function<void (int, std::function<void (int)>)>)>
-> rec_start<void, int>::next::next::next::type
std::function<void (int, std::function<void (int, std::function<void (int, std::function<void (int)>)>)>)>