इस तरह एक वर्ग होने:लैम्बडा में निजी विधि का उपयोग करना क्यों संभव नहीं है?
class A {
public:
bool hasGrandChild() const;
private:
bool hasChild() const;
vector<A> children_;
};
क्यों यह एक लैम्ब्डा अभिव्यक्ति विधि hasGrandChild()
इस तरह के रूप में परिभाषित में एक निजी विधि hasChild()
उपयोग करने के लिए संभव नहीं है?
bool A::hasGrandChild() const {
return any_of(children_.begin(), children_.end(), [](A const &a) {
return a.hasChild();
});
}
संकलक कि विधि hasChild()
संदर्भ में निजी है एक त्रुटि जारी करता है। क्या कोई कामकाज है?
संपादित करें: ऐसा लगता है कि जिस कोड को मैंने पोस्ट किया है वह मूल रूप से काम करता है। मैंने सोचा था कि यह बराबर है, लेकिन कोड है कि does not work on GCC अधिक इस तरह है:
#include <vector>
#include <algorithm>
class Foo;
class BaseA {
protected:
bool hasChild() const { return !children_.empty(); }
std::vector<Foo> children_;
};
class BaseB {
protected:
bool hasChild() const { return false; }
};
class Foo : public BaseA, public BaseB {
public:
bool hasGrandChild() const {
return std::any_of(children_.begin(), children_.end(), [](Foo const &foo) {
return foo.BaseA::hasChild();
});
}
};
int main()
{
Foo foo;
foo.hasGrandChild();
return 0;
}
लगता है वहाँ this does not work, लेकिन this works के रूप में पूरी तरह से योग्य नाम के साथ एक समस्या है।
बंद प्रकार अपनी कक्षा 'A' से कोई संबंध नहीं है, इसलिए स्वाभाविक रूप से यह' A' के गैर सरकारी सदस्यों का उपयोग नहीं कर सकते हैं। न ही यह कभी भी हो सकता है, क्योंकि इसका प्रकार नाम अज्ञात है, इसलिए आप इसे 'मित्र' भी नहीं बना सकते हैं। –
क्या यह सिर्फ मुझे है या यह काम gcc पर करता है? http://ideone.com/333qw – pmr
@pmr: हाँ यह पुराने जीसीसी में काम करता प्रतीत होता है, लेकिन नए में काम नहीं करता है। –