В С++ 14, что является хорошим способом для curry функций или объектов функции?
В частности, у меня есть перегруженная функция foo с некоторым случайным числом перегрузок: некоторые перегрузки могут быть найдены через ADL, другие могут быть определены в множестве мест.
У меня есть вспомогательный объект:
static struct {
template<class...Args>
auto operator()(Args&&...args)const
-> decltype(foo(std::forward<Args>(args)...))
{ return (foo(std::forward<Args>(args)...));}
} call_foo;
который позволяет мне передать перегрузку, установленную как единый объект.
Если бы я хотел каррировать foo, как мне это сделать?
Поскольку curry и приложение с частичной функцией часто используются взаимозаменяемо, под curry я подразумеваю, что если foo(a,b,c,d) является действительным вызовом, тогда curry(call_foo)(a)(b)(c)(d) должен быть действительным вызовом.