Boost function per membri di classe

Rileggendo Beyond the C++ Standard Library: An Introduction to Boost di Björn Karlsson.

Parte sull'uso di function, nel capitolo undicesimo, all'interno della terza parte, dedicata ai functor e alla programmazione di più alto ordine.

É possibile usare boost:function anche per funzioni che sono membro di una classe, anche se l'uso non é così elegante come ci si potrebbe aspettare.

Nell'esempio a seguire vediamo come fare in modo che l'oggetto di riferimento sia passato a function per valore, riferimento o puntatore:

#include <iostream>
#include "boost/function.hpp"

using namespace std;

class AClass {
public:
void doStuff(int i) const {
cout << "Stuff done: " << i << endl;
}
};

void function03() {
cout << "Class function by value" << endl;
boost::function<void(AClass, int)> f1;
f1 = &AClass::doStuff;
f1(AClass(), 1);

cout << "Class function by reference" << endl;
boost::function<void(AClass&, int)> f2;
f2 = &AClass::doStuff;
AClass ac2;
f2(ac2, 2);

cout << "Class function by pointer" << endl;
boost::function<void(AClass*, int)> f3;
f3 = &AClass::doStuff;
AClass ac3;
f3(&ac3, 3);
}

Nessun commento:

Posta un commento