Я изучаю boost lambda (не C++ 0X лямбда, потому что я думаю, что они разные). Но я не могу найти способ в Интернете вызывать функцию-член (а затем выводить результат), если единственным входным параметром является объект вызова. Я имею в виду эта линия работает:Boost лямбда-вызов функции
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());
работы.
Я искал в Интернете, но многие результаты предлагают использовать bind при вызове функции-члена. Теперь я знаю, что это
for_each(vecCt.begin(), vecCt.end(), bind(&MyClass::getName, _1);
делает меня способным вызвать getName
на каждом объекте передается междунар, но как я могу передать это выход на COUT? Это не работает:
for_each(vecCt.begin(), vecCt.end(), cout<<bind(&MyClass::.getName, _1);
Нашел: http://stackoverflow.com/questions/9762273/boost-lambda-dereference-placeholder – chris
Определение не работает. – doctorlove
@doctorlove Я предполагаю, что вы имеете в виду последнюю строку? Он не компилируется, и ошибка «не подходит для« оператора << »в« std :: cout << boost :: bind ... »« – tete