Je me demande si et comment il est possible de définir un objet fonction dans une fonction membre classes pour l'utiliser directement avec, par exemple, la fonction std :: transform.
Je sais que l'exemple est un peu stupide, c'est juste pour montrer le problème auquel je suis confronté.Déclaration et définition d'un objet fonction dans une fonction membre de classe
Fichier "example.h"
class Example {
public:
//.. constructor and destructor stuff
std::string toString() const; //Converts 'mVal' to a std::string
private:
std::vector<int> mVal; //Only one digit numbers are allowed ([0-9])
}
Fichier "example.cpp"
std::string Example::toString() const
{
//The functor which should be used in std::transform
struct {
char operator()(const int number) {
char c;
//"Convert" 'number' to a char
return c;
};
} functor;
//Transform the integers to char
std::string str(mVal.size(), '0'); //Allocate enough space
std::transform(mVal.begin(), mVal.end(), str.begin(), functor);
return str;
};//toString()
Depuis que j'ai essayé de mettre en œuvre un objet de fonction directement dans une fonction membre comme dans « example.cpp ", le code n'est pas compilé. Le message d'erreur que je reçois est:
error: no matching function for call to ‘transform(__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Example::toString() const::<anonymous struct>&)’
Je pense donc que le problème se pose lors de l'utilisation du struct « foncteur » dans std :: transformer. Quelqu'un peut-il me dire quel est le problème? Utilisation de:
compilateur gcc-4.2 sous Ubuntu Linux. Merci d'avance,
René.
Voir http://stackoverflow.com/questions/2662843/c-can-local-class-reference-be-passed-to-a-function –
double possible [Utilisation de classes locales avec des algorithmes STL] (http://stackoverflow.com/questions/742607/using-local-classes-with-stl-algorithms) –
Oui, vous avez raison. Je ne connaissais pas les termes de recherche exacts. – PiJ