Tôi sẽ biết nếu có một cách để vượt qua đối số bằng cách sử dụng std :: mem_fun? Tôi muốn chính xác rằng tôi có thể có nhiều đối số nhất có thể và rất nhiều chức năng của thành viên.
Vấn đề là tôi đang ở trên một tiêu chuẩn cũ và tôi đang tìm kiếm một cách thức đầy đủ để không được phép trả lời ngay cả khi tôi biết tôi có thể làm điều đó dễ dàng =/Làm thế nào để vượt qua các đối số bằng cách sử dụng std :: mem_fun
Đây là một chút minh họa làm thế nào tôi muốn sử dụng nó:
#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;
}
Cảm ơn bạn đã trả lời, bạn có thể đặt ví dụ về Làm thế nào để sử dụng nó ? Tôi không thể làm cho nó hoạt động .. – klefevre
Tôi cho rằng tôi có thể, nhưng 1) @LokiAstari đã có, vì vậy nó sẽ không thêm nhiều, và 2) Tôi không bao giờ sử dụng chúng bản thân mình. Tôi đã quyết định từ lâu họ không đáng để gặp rắc rối. Trong tình huống (hiếm khi đáng ngạc nhiên), nơi tôi cần loại điều đó, tôi viết một lớp nhỏ để giải quyết nó. Rất may, trong C++ 11, thật dễ dàng để loại bỏ điều đó. –
Thanks anyway .. – klefevre