Predicatы в классе
От: machine1 Россия  
Дата: 14.01.04 16:00
Оценка:
Привет!

Класс:


class A
{
   int b;
   vector<int> vect;


   bool pred(int& a){return a>b};
   void SomeFunc(int c);
}

void A::SomeFunc(int c)
{
   b=c;

   // Как сделать так чтобы вызывалась функция A::pred ???
   stable_partition(vect.begin(), vect.end(),pred);
};



Функция A::pred в зависимости от A::b возвращает различные значения, поэтому она находится внутри класса.
Как ее использовать в stable_partition???

Спасибо!
Re: Predicatы в классе
От: MaximE Великобритания  
Дата: 14.01.04 18:01
Оценка: 1 (1)
machine1 wrote:

[]

> Функция A::pred в зависимости от A::b возвращает различные значения, поэтому она находится внутри класса.

> Как ее использовать в stable_partition???

Здесь тебе это не нужно. Достаточно стандартного предиката greater<int>.

class A
{
    vector<int> vect;

    void SomeFunc(int c);
};

void A::SomeFunc(int c)
{
    stable_partition(vect.begin(), vect.end(), bind2nd(greater<int>(), c));
};


--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Re: Predicatы в классе
От: Аноним  
Дата: 14.01.04 18:02
Оценка: 1 (1)
Здравствуйте, machine1

Используйте функциональные адаптеры для функций классов: mem_fun_ref(op) (для ф-ии объекта) или mem_fun(op) (для указателя на объект).
Re: Predicatы в классе
От: a-lex Россия  
Дата: 14.01.04 18:23
Оценка: 1 (1)
Здравствуйте, machine1, Вы писали:

M>Функция A::pred в зависимости от A::b возвращает различные значения, поэтому она находится внутри класса.

M>Как ее использовать в stable_partition???

Вроде так:

stable_partition( vect.begin(), vect.end(), bind1st(mem_fun(A::pred), this) );


(не могу проверить -- нет под рукой нормального компилятора)
Re[2]: Predicatы в классе
От: machine1 Россия  
Дата: 14.01.04 18:25
Оценка:
Ну это пример в котором я показываю суть проблемы.
Re[2]: Predicatы в классе
От: machine1 Россия  
Дата: 14.01.04 18:30
Оценка:
А чего делает bind2nd?
Re[3]: Predicatы в классе
От: MaximE Великобритания  
Дата: 14.01.04 19:43
Оценка: 36 (2) :)
machine1 wrote:

> А чего делает bind2nd?


Нет ничего лучше, чем хорошая дока:
http://www.sgi.com/tech/stl/binder1st.html
http://www.sgi.com/tech/stl/binder2nd.html

Когда разберешься с std байндерами, выкинь их и пользуй boost::bind: http://www.boost.org/libs/bind/bind.html

--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Re[4]: Predicatы в классе
От: machine1 Россия  
Дата: 14.01.04 20:09
Оценка:
Спасибо за линки и за совет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.