Ускорение вызова лямбда-функции

Я учусь повысить лямбда (не C++0X лямбда, потому что я думаю, что они разные). Но я не могу найти способ онлайн вызвать функцию-член (и затем вывести результат), если единственным входным параметром является объект вызова. Я имею в виду, что эта строка работает:

for_each(vecCt.begin(), vecCt.end(), cout<<_1<<endl);

если vecCt является vector из int, Но что, если vecCt является vector из MyClass, которая имеет функцию под названием getName вернуть строку? Ни это:

for_each(vecCt.begin(), vecCt.end(), cout<<_1->getName());

ни это

for_each(vecCt.begin(), vecCt.end(), cout<<*_1.getName());

работает.

Я искал в Интернете, но многие результаты предлагают использовать связывание при вызове функции-члена. Теперь я знаю это

for_each(vecCt.begin(), vecCt.end(), bind(&MyClass::getName, _1);

позволяет мне звонить getName на каждый объект передается int, но как я могу передать этот вывод в cout? Это не работает:

for_each(vecCt.begin(), vecCt.end(), cout<<bind(&MyClass::.getName, _1);

1 ответ

Вполне вероятно, что вы смешиваете заполнители и функции из boost::, Глобальный, boos::lambda (возможно больше, как boost::phoenix тоже).

Вот исправленная демоверсия: Live On Coliru

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

struct X
{
    int x;
    std::string accessor() const { return "X[" + std::to_string(x) + "]"; } // I know, requires c++11
};

int main()
{
    std::vector<X> v;
    v.push_back({ 1 });
    v.push_back({2});
    v.push_back({3});
    v.push_back({4});
    v.push_back({5});

    std::for_each(v.begin(), v.end(), 
        std::cout << boost::lambda::bind(&X::accessor, boost::lambda::_1) << "\n");
}
Другие вопросы по тегам