Решил перейти с 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_));
Здравствуйте, 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>>
Извиняюсь. Ошибся. Надо так:
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>>
Здравствуйте, 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>>
Здравствуйте, 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 ';'
Здравствуйте, 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>