Quale costrutto dovrebbe essere utilizzato come surrogato per std::function<>
quando C++ 11 non è disponibile?
L'alternativa dovrebbe fondamentalmente consentire l'accesso alle funzioni dei membri privati di una classe da un'altra classe come nell'esempio seguente (non vengono utilizzate altre funzionalità di std :: function). La classe Foo è fissa e non può essere modificata molto, ho solo accesso alla classe Bar.Esiste qualcosa di simile a std :: function prima di 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);
...
}
Questo codice non dovrebbero compilare, anche quando l'ovvio gli errori sintattici sono corretti. I due oggetti 'Bar' sono costruiti con i puntatori alle funzioni dei membri privati, ma il codice in cui ciò accade non ha accesso a quei membri. Questo non ha nulla a che fare con 'std :: function'; non arriva a violare le regole di accesso. –