Jaki konstrukt powinien być użyty jako surogat dla std::function<>
, gdy C++ 11 jest niedostępny?
Alternatywa powinna zasadniczo umożliwiać dostęp do prywatnych funkcji składowych jednej klasy z innej klasy, jak w poniższym przykładzie (inne funkcje funkcji std :: nie są używane). Klasa Foo jest stała i nie można jej zmienić zbyt wiele, mam dostęp tylko do paska klasy.Czy istnieje coś podobnego do std :: function before C++ 11?
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);
...
}
Kod ten nie powinien skompilować, nawet gdy oczywiste błędy składniowe są naprawione. Dwa obiekty "Bar" są konstruowane ze wskaźnikami do prywatnych funkcji składowych, ale kod, w którym to występuje, nie ma dostępu do tych elementów. Nie ma to nic wspólnego z 'std :: function'; nie może złamać reguł dostępu. –