का उपयोग करके तर्क कैसे गुजर रहा है मुझे पता चलेगा कि std :: mem_fun का उपयोग करके तर्क पारित करने का कोई तरीका है या नहीं? मैं सटीक बनाना चाहता हूं कि मेरे पास जितना संभव हो उतना तर्क हो सकता है और बहुत से सदस्य कार्य हो सकते हैं।
समस्या यह है कि मैं एक पुराने मानक पर हूं और मैं एक पूर्ण एसएलएल रास्ता तलाश रहा हूं इसलिए अगर मुझे पता है कि मैं इसे आसानी से कर सकता हूं तो भी बढ़ावा देने की अनुमति नहीं है =/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
मुझे लगता है कि मैं कर सकता था, लेकिन 1) @ लोकी एस्टारी पहले से ही है, इसलिए इसमें ज्यादा वृद्धि नहीं होगी, और 2) मैंने कभी उनका उपयोग नहीं किया। मैंने बहुत समय पहले फैसला किया कि वे परेशानी के लायक नहीं थे। (आश्चर्यजनक रूप से दुर्लभ) स्थिति में जहां मुझे उस तरह की चीज की ज़रूरत है, मैं इससे निपटने के लिए एक छोटी मजेदार कक्षा लिखता हूं। शुक्र है, सी ++ 11 में, इसे भी खत्म करना आसान है। –
वैसे भी धन्यवाद .. – klefevre