我會知道是否有方法使用std :: mem_fun傳遞參數? 我想確切地說,我可以有儘可能多的參數和很多成員函數。
的問題是,我在一箇舊的標準,我在尋找一個完整的STL方式,以便提升是不允許的答案,即使我知道我能做到這一點很容易=/如何使用std :: mem_fun傳遞參數
這裏是一個小我想怎麼說明使用方法:
#include <list>
#include <algorithm>
// Class declaration
//
struct Interface {
virtual void run() = 0;
virtual void do_something(int) = 0;
virtual void do_func(int, int) = 0;
};
struct A : public Interface {
void run() { cout << "Class A : run" << endl; }
void do_something(int foo) { cout << "Class A : " << foo << endl; }
void do_func(int foo, int bar) { cout << "Class A : " << foo << " " << bar << endl; }
};
struct B : public Interface {
void run() { cout << "Class B : run" << endl; }
void do_something(int foo) { cout << "Class B : " << foo << endl; }
void do_func(int foo, int bar) { cout << "Class B : " << foo << " " << bar << endl; }
};
// Main
//
int main() {
// Create A and B
A a;
B b;
// Insert it inside a list
std::list<Interface *> list;
list.push_back(&a);
list.push_back(&b);
// This works
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::run));
// But how to give arguments for those member funcs ?
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::do_something));
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::do_func));
return 0;
}
謝謝你的回答,你能舉個例子如何使用它 ?我無法得到它的工作.. – klefevre 2012-03-15 03:18:13
我想我可以,但1)@LokiAstari已經有了,所以它不會增加太多,2)我從來沒有使用它們。我很久以前決定他們不值得這樣做。在我需要這種事情的(令人驚奇的)情況下,我寫了一個小的函子類來處理它。值得慶幸的是,在C++ 11中,也很容易消除這一點。 – 2012-03-15 03:22:36
無論如何感謝.. – klefevre 2012-03-15 03:23:48