Наличие такого класса:
class A {
public:
bool hasGrandChild() const;
private:
bool hasChild() const;
vector children_;
};
Почему нельзя использовать приватный метод hasChild()
в лямбда-выражении, определенном в методе hasGrandChild()
вот так?
bool A::hasGrandChild() const {
return any_of(children_.begin(), children_.end(), [](A const &a) {
return a.hasChild();
});
}
Компилятор выдает ошибку, что метод hasChild()
является приватным в контексте. Есть ли обходной путь?
Изменить: Кажется, код, который я разместил, изначально работает. Я думал, что это эквивалентно, но код, который не работает на GCC , больше похож на этот:
#include
#include
class Foo;
class BaseA {
protected:
bool hasChild() const { return !children_.empty(); }
std::vector 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;
}
Похоже, что есть проблема с полными именами, так как это не работает , но это работает .