Browse DevX
Sign up for e-mail newsletters from DevX


Use Function Adapters to Extend Generic Algorithms' Usage-4 : Page 4




Building the Right Environment to Support AI, Machine Learning and Deep Learning

Further Adaptation
Containers of pointers are used, among other things, for implementing of a heterogeneous container:

class Base { public: virtual void speak() const {std::cout<<"I'm Base"<<std::endl;} }; class Derived : pubic Base { public: void speak()const {std::cout<<"I'm Derived"<<std::endl;} }; std::vector<Base *> vpb; //heterogeneous vpb.push_back(new Base); vpb.push_back(new Derived); vpb.push_back(new Base);

Suppose you want to call speak() for every element of vpb. Again, using for_each() is a preferable choice. However, because vpb stores pointers rather than objects, you have to use a different adapter this time, namely mem_fun():

Figure 3: This shows the output from this for_each() call:.

std::for_each (vpb.begin(), vpb.end(), std::mem_fun(&Base::speak));

Figure 3 shows the output of this for_each() call.

The Standard Library defines a rich set of adapters:

  • ptr_fun takes a function pointer as its argument and returns a function pointer adaptor, which is a kind of a function object.
  • The mem_fun_ref family binds a member function to an object's reference and returns a function object.
  • The mem_fun functions binds a member function to an object's pointer and returns a matching function object.
Each adapter is classified according to these criteria: does it apply to an ordinary function or a member function? If it's the latter, the adapter functions contain the affix mem_. If the adapter binds a member function to a reference rather than a pointer, it contains the affix ref_. Finally, if the member function takes an argument, then the adapter contains the affix fun1_ instead of fun_. For example mem_fun1_ref() binds a member function taking one argument to a reference, whereas mem_fun1() binds a member function taking one argument to a pointer.

Danny Kalev is a system analyst and software engineer with 13 years of experience, specializing in C++ and object-oriented analysis and design. He is a member of the ANSI C++ standardization committee and the author of ANSI/ISO C++ Professional Programmer's Handbook (Que, 1999, ISBN: 0789720221). Reach him at dannykk@inter.net.il.
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date