Originariamente inviato da GliderKite
Soluzioni diverse?
Codice PHP:
#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>
#include <iterator>
namespace ig{
template <typename TFunctor, typename TObject>
class GWrapper{
public:
bool operator () (const int i, const int j) const{
return (fObject.*fFunctor) (i, j);
}
private:
TFunctor fFunctor;
const TObject &fObject;
public:
GWrapper (TFunctor theFunctor, TObject theObject):
fFunctor (theFunctor),
fObject (theObject){
}
};
}
class prova
{
public:
bool compare( const int i, const int j) const
{
return i < j;
}
void sort_vect()
{
typedef bool (prova::* MemFunPtr)(const int, const int) const;
ig::GWrapper <MemFunPtr, prova> aWrapper (&prova::compare, *this);
std::sort( vect.begin(), vect.end(), aWrapper);
}
std::vector <int> vect;
};
int main (void){
/*
$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
$ g++ -Wall -Wextra -Wconversion -pedantic -ansi main.cpp
$ ./a.out
original:
1, 3, 2, 4,
sorted:
1, 2, 3, 4,
bye bye...
*/
prova aProva;
aProva.vect.push_back (1);
aProva.vect.push_back (3);
aProva.vect.push_back (2);
aProva.vect.push_back (4);
std::cout << "original: " << std::endl;
std::copy (aProva.vect.begin (), aProva.vect.end (), std::ostream_iterator <int>(std::cout, ", "));
std::cout << std::endl;
std::cout << "sorted: " << std::endl;
aProva.sort_vect ();
std::copy (aProva.vect.begin (), aProva.vect.end (), std::ostream_iterator <int>(std::cout, ", "));
std::cout << std::endl;
std::cout << "bye bye..." << std::endl;
return 0;
}