7
Mi piacerebbe avere una funzione BindFirst
che leghi il primo argomento di una funzione senza che io debba conoscere/dichiarare esplicitamente l'arità della funzione usando std :: segnaposti. Mi piacerebbe che il codice client assomigliasse a qualcosa del genere.vincola il primo argomento della funzione senza conoscere la sua appartenenza
#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);
}
Qualche idea su come è possibile implementare BindFirst
?
posso sapere il motivo per cui 'std :: decay' è Usato? – billz
@billz Perché qui vogliamo archiviare le copie (eventualmente spostate) degli argomenti passati a 'BindFirst'. Certamente non vuoi memorizzare riferimenti, né la loro costanza/volatilità è di tuo interesse qui. Dì, per 'T && = int && 'vuoi memorizzare' int' –