Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Small
- {
- public:
- void foo();
- void bar(int x);
- // and many more functions
- };
- class Big
- {
- public:
- void foo()
- {
- for (size_t i = 0; i < VectorOfSmalls.size(); i++)
- VectorOfSmalls[i]->foo();
- }
- void bar(int x)
- {
- for (size_t i = 0; i < VectorOfSmalls.size(); i++)
- VectorOfSmalls[i]->bar(x);
- }
- // and many more functions
- private:
- vector<Small*> VectorOfSmalls;
- };
- void Big::call_command(const string & command)
- {
- for (size_t i = 0; i < VectorOfSmalls.size(); i++)
- {
- if (command == "foo")
- VectorOfSmalls[i]->foo();
- else if (command == "bar")
- VectorOfSmalls[i]->bar();
- }
- }
- void Big::foo()
- {
- call_command("foo");
- }
- void foo() {
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(&Small::foo));
- }
- void bar() {
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(&Small::bar));
- }
- class Big {
- public:
- enum Command {
- DO_FOO,
- DO_BAR
- };
- void doit(Command cmd) {
- switch(cmd) {
- case DO_FOO:
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(&Small::foo));
- break;
- case DO_BAR:
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(&Small::bar));
- break;
- }
- };
- class Big {
- public:
- template<void (Small::*fn)()>
- void doit() {
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(fn));
- }
- };
- Big b;
- b.doit<&Small::foo>();
- b.doit<&Small::bar>();
- #include <algorithm>
- #include <functional>
- #include <iostream>
- #include <vector>
- class Small {
- public:
- void foo() { std::cout << "foo" << std::endl; }
- void bar(int x) { std::cout << "bar" << std::endl; }
- };
- class Big {
- public:
- template<void (Small::*fn)()>
- void doit() {
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::mem_fun(fn));
- }
- template<class T, void (Small::*fn)(T)>
- void doit(T x) {
- std::for_each(VectorOfSmalls.begin(), VectorOfSmalls.end(), std::bind2nd(std::mem_fun(fn), x));
- }
- public:
- std::vector<Small *> VectorOfSmalls;
- };
- int main() {
- Big b;
- b.VectorOfSmalls.push_back(new Small);
- b.VectorOfSmalls.push_back(new Small);
- b.doit<&Small::foo>();
- b.doit<int, &Small::bar>(5);
- }
- void Big::call_command(const boost::function<void (Small*)>& f)
- {
- for (size_t i = 0; i < VectorOfSmalls.size(); i++)
- {
- f(VectorOfSmalls[i]);
- }
- }
- int main()
- {
- Big b;
- b.call_command(boost::bind(&Small::foo, _1));
- b.call_command(boost::bind(&Small::bar, _1, 5));
- }
Add Comment
Please, Sign In to add comment