eine Klasse wie folgt zu haben:Warum ist es nicht möglich, private Methode in einem Lambda zu verwenden?
class A {
public:
bool hasGrandChild() const;
private:
bool hasChild() const;
vector<A> children_;
};
Warum ist es nicht möglich, eine private Methode hasChild()
in einem Lambda-Ausdruck in dem Verfahren hasGrandChild()
wie folgt definiert zu benutzen?
bool A::hasGrandChild() const {
return any_of(children_.begin(), children_.end(), [](A const &a) {
return a.hasChild();
});
}
Compiler eine Fehlermeldung, dass das Verfahren hasChild()
im Rahmen privat ist. Gibt es eine Problemumgehung?
Edit: Es scheint, dass der Code, wie ich es ursprünglich geschrieben funktioniert. Ich dachte, dass es äquivalent ist, aber der Code, die does not work on GCC mehr ist wie folgt:
#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;
}
scheint, dass es ein Problem mit voll qualifizierten Namen als this does not work, aber this works.
Der Verschluss hat keine Beziehung zu Ihrer Klasse 'A', so natürlich nicht darauf zugreifen können' A' nicht-öffentlichen Mitglieder. Es kann es auch nie, da sein Typname nicht zu erkennen ist, so dass man es nicht einmal zum "Freund" machen kann. –
Ist es nur ich oder funktioniert das auf gcc? http://ideone.com/333qw – pmr
@pmr: Ja, es scheint in älteren GCC zu funktionieren, aber funktioniert nicht in neueren. –