Skip to content

Instantly share code, notes, and snippets.

@vladris
Created October 14, 2016 06:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vladris/03aa03f6798ebf5fab84a948d6998d26 to your computer and use it in GitHub Desktop.
Save vladris/03aa03f6798ebf5fab84a948d6998d26 to your computer and use it in GitHub Desktop.
Simple curry recipe
template <typename Func, typename Arg>
struct curry_t
{
template <typename ...Args>
auto operator()(Args&& ...args)
{
return _func(_arg, std::forward<Args>(args)...);
}
Func _func;
Arg _arg;
};
template <typename Func, typename Arg>
auto curry(Func func, Arg&& arg)
{
return curry_t<Func, Arg> { func, std::move(arg) };
}
int add(int x, int y)
{
return x + y;
}
int main()
{
auto add_one = curry(add, 1);
cout << add_one(41) << endl;
auto moar_curry = curry(add_one, 41);
cout << moar_curry() << endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment