Poprzednie wersje
std::bind1st,
std::bind2nd, z powodu swoich ograniczeń w nowym standardzie zostały uznane za przestarzałe i w przyszłości mogą być usunięte. Nowa wersja czerpie dużo z
boost::bind. Poniżej ogólna postać tej funkcji:
auto nowFunkcja = std::bind(funkcja, argumenty);
std::bind dobrze współgra z lambdami, a czasami można je stosować zamiennie. Jeżeli chcemy przekazać jakiś parametr jako referencję trzeba posłużyć się funkcją
std::ref. Przykład:
#include <iostream>
#include <vector>
#include <algorithm>
void in_range(std::ostream &os, int top, int bottom, int value) {
if (value > bottom and value < top)
os << "Value: " << value << std::endl;
}
int main()
{
std::vector<int> vec {1, 3, 2, 6, 2};
int const myBottom = 2;
int const myTop = 9;
using namespace std::placeholders;
auto fun = std::bind(in_range, std::ref(std::cout), myTop, myBottom, _1);
std::for_each(begin(vec), end(vec), fun);
return 0;
}
std::for_each karmi naszą funkcję (fun) jednym argumentem przechwytywanym przez
std::placeholders::_1. Wynik:
Value: 3
Value: 6
Brak komentarzy:
Prześlij komentarz