Re: boost::bind и перегруженные функции
От: jerry_ru  
Дата: 27.07.11 05:41
Оценка:
Здравствуйте, silart, Вы писали:

S>
S>vector<Point> points_in;
S>...
S>    Writer writer(buffer, caption, frequency, size);
S>    points_in = helpers::make_randomPoints(size, count);

S>     for_each(points_in.begin(), points_in.end(), 
S>         boost::bind(&Writer::write, &writer, _1) );
S>


S>Этот код прекрасно собирается и работает.

S>Но вот возникла необходимость добавить в класс Writer еще одну функцию write:

S>
S>        void write(const Point& point);
S>        void write(const std::vector<Point>& points);
S>


S>И вышеприведенный код перестает собираться, компилятор выдает кучу ошибок.

S>Пробовал в новую версию функции write добавить еще параметр, это помогает.

S>Очевидно, что компилятор не может правильно определить параметры шаблонной функции bind и их нужно задать явно.

S>Помогите пожалуйста это сделать.

я обычно делаю примерно так:

//объявляем тип указателя:
typedef void (Writer::* write_ptr)(const Point&);

//явно приводим типы
boost::bind( (write_ptr)(&Writer::writ), &writer, _1) );


за корректность я сейчас ре ручаюсь, но в результате работает. Если тип функции не длинный можно прям по месту приводить:
//явно приводим типы
boost::bind( (void (Writer::*)(const Point&)(&Writer::writ), &writer, _1) );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.