std :: for_each для функции-члена с 1 аргументом - PullRequest
3 голосов
/ 04 апреля 2010

Мне интересно, как реализовать то, что указано в заголовке. Я пробовал что-то вроде ...

std::for_each( a.begin(), a.end(), std::mem_fun_ref( &myClass::someFunc ) )

но я получаю сообщение об ошибке, говорящее, что «термин» (я предполагаю, что это означает 3-й аргумент) не оценивается как функция с 1 аргументом, даже если someFunc принимает один аргумент - тип объекты, хранящиеся в a.

Мне интересно, возможно ли то, что я пытаюсь сделать, используя стандартную библиотеку (я знаю, что я могу легко это сделать с помощью boost).

P.S. Имеет ли использование for_each и mem_fun_ref какое-либо влияние на производительность по сравнению с простой итерацией по a вручную и передачей объекта в someFunc?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2010

Несмотря на то, что someFunc является членом с одним параметром, mem_fun_ref использует неявный первый аргумент «myClass». Вы хотите использовать элементы вектора в качестве второго аргумента.

И, вероятно, нет никаких негативных последствий для производительности при использовании for_each и mem_fun_ref. Компилятор сгенерирует сопоставимый код. Но единственный способ убедиться в этом - это тестирование:)

  std::for_each(a.begin(), a.end(),
                std::bind1st(
                    std::mem_fun_ref( &MyClass::SomeFunc ),
                    my_class ));
1 голос
/ 04 апреля 2010

Я думаю, вам нужно использовать bind_1st для предоставления скрытого аргумента "this". Или вы имеете в виду, что аргумент "this" является единственным, у someFunc нет собственных параметров?

...