2009-02-28 1 views
4

У меня есть класс, который выглядит так.Как вызвать функцию-член объекта как unary_function для std-алгоритмов?

class A 
{ 
public: 
    void doSomething(); 
} 

У меня есть массив этих классов. Я хочу вызвать doSomething() для каждого элемента массива. Каков самый простой способ сделать это, используя заголовок алгоритмов?

+0

bradtgmurray: вы спросили и ответили на свой вопрос, оба «около 3 часов назад», без промежуточных ответов? ПЛОХОЙ ТОН. Я голосую. – abelenky

+2

@abelenky, вам необходимо прочитать FAQ. –

ответ

8

Используйте std :: mem_fun_ref, чтобы обернуть функцию-член как унарную функцию.

#include <algoritm> 
#include <functional> 

std::vector<A> the_vector; 

... 

std::for_each(the_vector.begin(), the_vector.end(), 
       std::mem_fun_ref(&A::doSomething)); 

Вы также можете использовать зЬй :: mem_fun, если ваш вектор содержит указатели на класс, а не самих объектов.

std::vector<A*> the_vector; 

... 

std::for_each(the_vector.begin(), the_vector.end(), 
       std::mem_fun(&A::doSomething)); 
+0

Чтобы быть точным, в вашем втором примере вектор не содержит ссылок, а объектов/экземпляров. «Ref» в mem_fun_ref указывает, что метод будет преобразован в функцию, которая принимает в качестве параметра ссылку на экземпляр. С mem_fun функция принимает указатель. –

+0

Эффективный STL - ваш друг - ПРОЧИТАЙТЕ ЭТО – 2009-03-01 00:07:07