Person
Person

Reputation: 439

std::for_each on a member function with 1 argument

I'm wondering how to implement what is stated in the title. I've tried something like...

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

but I get an error saying that the "term" (I"m assuming it means the 3rd argument) doesn't evaluate to a function with 1 argument, even though someFunc does take one argument - the type of the objects stored in a.

I'm wondering if what I'm trying to do is possible using the standard library (I know I can do it easily using boost).

P.S. Does using for_each and mem_fun_ref have any performance implications in comparison to just iterating through a manually and passing the object to someFunc?

Upvotes: 3

Views: 2809

Answers (2)

Stephen
Stephen

Reputation: 49234

Even though someFunc is a member with one parameter, mem_fun_ref uses an implicit first argument of "myClass". You want to use the vector's items as the 2nd argument .

And there are probably no negative performance implications of using for_each and mem_fun_ref. The compiler will generate comparable code. But, the only way to be sure is to benchmark :)

  std::for_each(a.begin(), a.end(),
                std::bind1st(
                    std::mem_fun_ref( &MyClass::SomeFunc ),
                    my_class ));

Upvotes: 2

Ben Voigt
Ben Voigt

Reputation: 283971

I think you need to use bind_1st to supply the hidden "this" argument. Or do you mean that the "this" argument is the only one, someFunc has no parameters of its own?

Upvotes: 1

Related Questions