¿Por qué no es posible utilizar el método privado en un lambda?
Tener una clase como esta:
class A {
public:
bool hasGrandChild() const;
private:
bool hasChild() const;
vector<A> children_;
};
¿Por qué no es posible utilizar un método privado?hasChild()
en una expresión lambda definida en el métodohasGrandChild()
¿Me gusta esto?
bool A::hasGrandChild() const {
return any_of(children_.begin(), children_.end(), [](A const &a) {
return a.hasChild();
});
}
El compilador emite un error que el métodohasChild()
Es privado dentro del contexto. ¿Hay algún trabajo alrededor?
Editar: Parece que el código como lo publiqué originalmente funciona. Pensé que es equivalente, pero el código queno funciona en GCC es más como esto:
#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;
}
Parece que hay un problema con los nombres completos comoesto no funciona, peroesto funciona.