Интересно, можно ли и как определить объект функции внутри функции-члена класса, чтобы использовать его напрямую, например, с функцией std :: transform.
Я знаю, что этот пример немного глуп, онпросто чтобы показать проблему, с которой я столкнулся.
Файл "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])
}
Файл "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()
С тех пор, как я пытался реализовать объект функции непосредственно внутри функции-членакак в "example.cpp", код не компилируется.Я получаю сообщение об ошибке:
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>&)’
Так что я думаю, что проблема возникает при использовании структуры "functor" в std :: transform.Может кто-нибудь сказать мне, в чем проблема?
Использование:
компилятор gcc-4.2 под Ubuntu Linux.
Заранее спасибо,
René.