7
Ich hätte gerne eine Funktion BindFirst
, die das erste Argument einer Funktion bindet, ohne dass ich die Arität der Funktion explizit wissen/angeben muss, indem ich std :: placeholders verwende. Ich möchte, dass der Client-Code in etwa so aussieht.binde das erste Argument der Funktion, ohne dessen Arität zu kennen
#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);
}
Irgendwelche Ideen, wie BindFirst
implementiert werden könnte?
kann ich wissen, warum 'std :: decay' ist benutzt? – billz
@billz Weil wir hier Kopien (möglicherweise move-constructed) der an BindFirst übergebenen Argumente speichern wollen. Sicherlich wollen Sie keine Referenzen speichern, auch ihre Konstanz/Flüchtigkeit interessiert Sie hier nicht. Sagen Sie, für 'T && = int &&' möchten Sie 'int' speichern –