7
Chciałbym mieć funkcję BindFirst
, która wiąże pierwszy argument funkcji bez konieczności jawnego poznania/podania arytmetycznego funkcji za pomocą std :: placeholders. Chciałbym, żeby kod klienta wyglądał tak.wiążę pierwszy argument funkcji bez znajomości jego wartości
#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);
}
Jakieś pomysły, w jaki sposób można wdrożyć BindFirst
?
mogę wiedzieć dlaczego 'std :: decay' jest używany? – billz
@billz Ponieważ tutaj chcemy przechowywać kopie (prawdopodobnie przeniesione) argumentów przekazywanych do 'BindFirst'. Na pewno nie chcesz przechowywać referencji, ani ich konstytutywność/niestabilność jest tutaj interesująca. Powiedz, dla 'T && = int &&' chcesz zachować 'int' –