Автоматически определить тип bind1st (mem_fun (& my_class :: f), это)? - PullRequest
1 голос
/ 22 января 2011

Я бы хотел передать функтор bind1st(mem_fun(&my_class::f), this) на for_each.К сожалению, его очень трудно читать, поэтому я хотел бы дать ему более читаемое имя, например:

(the type I am looking for) meaningful_name = bind1st(mem_fun(&my_class::f), this);

for_each(v.begin(), v.end(), meaningful_name);

Есть ли простой способ определить тип функтора?(Я знаю, что mem_fun избавляет нас от боли именно по этой причине.)

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Это зависит от аргумента и возвращаемых типов my_class: f.Если функция

T my_class::f(A arg)

, тогда вам нужно

binder1st<mem_fun1_t<T,my_class,A> > meaningful_name = bind1st(mem_fun(&my_class::f), this);

Подобные вещи будут приятнее с C ++ 0x:

auto meaningful_name = bind1st(mem_fun(&my_class::f), this);
2 голосов
/ 22 января 2011

Нет, простого пути нет. Имя типа будет довольно длинным и даже более нечитаемым. И если вы используете boost, вам не нужно использовать BOOST_AUTO, потому что вы можете просто использовать boost::bind и иметь его для чтения, без необходимости в локальном.

for_each(v.begin(), v.end(), boost::bind(&my_class::f, this));
...