В С++ 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)
должен быть действительным вызовом.