boost::bind как тип
От: pasenger  
Дата: 08.10.07 16:28
Оценка:
Решил перейти с std::vector на std::set. Было так
bool CompareRows(IRowPtr row1, IRowPtr row2, const std::vector<int> &a, SomeClass *sc);

std::vector<IRowPtr> rows;
std::sort(rows.begin(), rows.end(), boost::bind(CompareRows, _1, _2, a_, sc_));

Теперь переходим на std::set и функцию сортировки хотим сделать частью определения. И тут какая-то грабля.
std::set<IRowPtr, boost::bind< /*что здесь должно быть?*/ > > rows(boost::bind(CompareRows, _1, _2, a_, sc_));
Re: boost::bind как тип
От: ArtDenis Россия  
Дата: 08.10.07 16:44
Оценка:
Здравствуйте, pasenger, Вы писали:

P>

P>Теперь переходим на std::set и функцию сортировки хотим сделать частью определения. И тут какая-то грабля.


[c]std::set<IRowPtr, boost::function<bool(IRowPtr, IRowPtr, const std::vector<int>&, SomeClass*)> > rows[c]
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: boost::bind как тип
От: ArtDenis Россия  
Дата: 08.10.07 16:54
Оценка:
Извиняюсь. Ошибся. Надо так:

std::set<IRowPtr, boost::function<bool(IRowPtr, IRowPtr)> > 
    rows(boost::bind(CompareRows, _1, _2, a_, &sc_));
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: boost::bind как тип
От: Кодт Россия  
Дата: 08.10.07 17:08
Оценка:
Здравствуйте, pasenger, Вы писали:

P>Теперь переходим на std::set и функцию сортировки хотим сделать частью определения. И тут какая-то грабля.

P>
P>std::set<IRowPtr, boost::bind< /*что здесь должно быть?*/ > > rows(boost::bind(CompareRows, _1, _2, a_, sc_));
P>

Тут должно быть boost::function<bool(IRowPtr,IRowPtr)>
Ибо время жизни компаратора в сортировке вектора/списка — всего лишь до конца полного выражения, и поэтому там могут работать временные объекты. А время жизни компаратора у std::set/map — от рассвета до заката контейнера. Нужно постоянство.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: boost::bind как тип
От: pasenger  
Дата: 09.10.07 04:09
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>
AD>std::set<IRowPtr, boost::function<bool(IRowPtr, IRowPtr)> > 
AD>    rows(boost::bind(CompareRows, _1, _2, a_, &sc_));
AD>


error C2061: syntax error : identifier 'bind'
error C2059: syntax error : ')'
error C2143: syntax error : missing ')' before ';'
Re[4]: boost::bind как тип
От: Smal Россия  
Дата: 09.10.07 05:45
Оценка:
Здравствуйте, pasenger, Вы писали:

AD>>
AD>>std::set<IRowPtr, boost::function<bool(IRowPtr, IRowPtr)> > 
AD>>    rows(boost::bind(CompareRows, _1, _2, a_, &sc_));
AD>>


P>error C2061: syntax error : identifier 'bind'

P>error C2059: syntax error : ')'
P>error C2143: syntax error : missing ')' before ';'

Может?
#include <boost/function.hpp>
С уважением, Александр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.