In my post c++: separate methods from their classes I described how to call class method by reference. The similar staff you can do with class members. Assume you have a collection of class instances and you want to print the values of some members from them. Again you can define two lists - list of class instances and list of pointers to class members. Later you can iterate through these list to touch members of the classes.
#include <iostream> #include <list> class A { public: int m0; int m1; }; template<typename T> void print(const T &a, int T::*p) { std::cout << a.*p << std::endl; } int main(int argc, char **argv) { std::list<A> ls; std::list<int A::*> lsm; int A::*p0 = &A::m0; lsm.push_back(p0); lsm.push_back(&A::m1); A a0, a1; a0.*p0 = 0; a0.m1 = 1; a1.m0 = 2; a1.m1 = 3; ls.push_back(a0); ls.push_back(a1); for (std::list<A>::iterator i = ls.begin();i!=ls.end();++i) for (std::list<int A::*>::iterator j = lsm.begin();j!=lsm.end();++j) print(*i, *j); return 0; }With this piece of code you will get
0 1 2 3This method to access class members can be combined with class methods references to achieve more power.
No comments:
Post a Comment