Не компилируется следующий код:
#include <iostream>
#include <functional>
using namespace std;
struct TestCont{
void push_back(const string& str) const{
cout << "TRATATATTATATATA & "<<str<<"!" << endl;
}
void push_front(const string& str) const{
cout << str << " & TRATATATTATATATA!" << endl;
}
};
TestCont cont();
int main(){
bind1st( mem_fun(&TestCont::push_back), &cont );
}
Нужно "забиндить" функцию-член и конкретный объект и передать в некоторую функцию. Я пробовал использовать bind1st и mem_fun, но даже простейший код, приведённый выше, не компилируется. Помогите разобраться, что делаю не так.
Похожая проблемаАвтор:
Дата: 05.11.04
, но эта тема, к сожалению, мне не помогла.
Здравствуйте, baf, Вы писали:
baf>Нужно "забиндить" функцию-член и конкретный объект и передать в некоторую функцию. Я пробовал использовать bind1st и mem_fun, но даже простейший код, приведённый выше, не компилируется. Помогите разобраться, что делаю не так.
baf>Похожая проблемаАвтор:
Дата: 05.11.04
, но эта тема, к сожалению, мне не помогла.
У стандартных bind1st и прочих есть проблема — они не умеют байндить функции с параметрами ссылками (у них унутре ссылка на ссылку появляется)
Поэтому либо передавать строки по значению со всеми вытекающими, либо буст.
boost::bind(&TestCont::push_back, cont,_1);
Еще один косяк в коде
TestCont cont();
скобки лишние.
Здравствуйте, Sergey Chadov, Вы писали:
SC>У стандартных bind1st и прочих есть проблема — они не умеют байндить функции с параметрами ссылками (у них унутре ссылка на ссылку появляется)
SC>Поэтому либо передавать строки по значению со всеми вытекающими, либо буст.
SC>SC> boost::bind(&TestCont::push_back, cont,_1);
SC>
SC>Еще один косяк в коде
SC>SC>TestCont cont();
SC>
SC>скобки лишние.
Спасибо! Теперь всё понятно.
Буду использовать boost::bind )
Здравствуйте, baf, Вы писали:
baf>Спасибо! Теперь всё понятно.
baf>Буду использовать boost::bind )
Есть еще
Boost.Functional который содержит те же методы, что и std, но с исправлениями.