सी ++ 11 उपलब्ध नहीं होने पर std::function<>
के लिए सरोगेट के रूप में किस निर्माण का उपयोग किया जाना चाहिए?
वैकल्पिक रूप से नीचे एक उदाहरण के रूप में एक वर्ग के निजी सदस्य कार्यों तक पहुंचने की अनुमति देनी चाहिए जैसे कि नीचे दिए गए उदाहरण (std :: function की अन्य विशेषताओं का उपयोग नहीं किया जाता है)। कक्षा फू तय है और ज्यादा नहीं बदला जा सकता है, मेरे पास केवल कक्षा बार तक पहुंच है।क्या सी ++ 11 से पहले std :: function के समान कुछ है?
class Foo {
friend class Bar; // added by me, rest of the class is fixed
private:
void doStuffFooA(int i);
void doStuffFooB(int i);
};
class Bar {
public:
Bar(Foo foo, std::function< void (const Foo&, int) > func) {
myFoo = foo;
myFooFunc = func;
};
private:
doStuffBar(const &Foo foo) {
myFooFunc(foo, 3);
}
Foo myFoo;
std::function< void (const Foo&, int) > myFooFunc;
}
int main() {
Foo foo(...);
Bar barA(foo, &Foo::doStuffFooA);
Bar barB(foo, &Foo::doStuffFooB);
...
}
इस कोड को संकलित नहीं किया जाना चाहिए, भले ही स्पष्ट वाक्यविन्यास त्रुटियों को ठीक कर रहे हैं। दो 'बार' ऑब्जेक्ट्स को व्यक्तिगत सदस्य कार्यों के लिए पॉइंटर्स के साथ बनाया गया है, लेकिन जहां यह होता है, उस कोड के पास उन सदस्यों तक पहुंच नहीं है। इसका 'std :: function' से कोई लेना देना नहीं है; यह एक्सेस नियमों को तोड़ने के लिए नहीं मिलता है। –