I'd like to have a function BindFirst
that binds the first argument of a function without me having to explicitly know/state the arity of the function by using std::placeholders. I'd like the client code to look something like that.
#include <functional>
#include <iostream>
void print2(int a, int b)
{
std::cout << a << std::endl;
std::cout << b << std::endl;
}
void print3(int a, int b, int c)
{
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
}
int main()
{
auto f = BindFirst(print2, 1); // std::bind(print2, 1, std::placeholders::_1);
auto g = BindFirst(print3, 1); // std::bind(print3, 1, std::placeholders::_1, std::placeholders::_2);
f(2);
g(2,3);
}
Any ideas how BindFirst
could be implemented?
In C++11:
DEMO 1
In C++14:
DEMO 2