Здравствуйте, 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) );