#1 19.05.09 23:03
[C++]Указатель на функцию-член класса
Нужно предложение решения одной проблемки, суть следующая.
Дан интерфейс класса Cat с чудесным конструктором, принимающим указатель на функцию.
В методе класса Box нужно создать экземпляр Cat и скормить ему в качестве задания метод Task, однако указатель на функцию-член класса Task не совпадает по типу с простым указателем на функцию (void *) (*f) (void *). Нужен способ, позволяющий передать эту функцию Task параметром. Вообще, Cat это advanced обертка для POSIX-тредов, поэтому она требует именно указатель на функцию и интерфейс Cat как бы неизменяем. Выслушаю ваши предложения как это можно сделать.
Код::
class Cat
{
public:
Cat(void * (* routine) (void * params));
};
class Box
{
public:
void Method(void * someparams);
private:
Cat * myCat;
void * Task(void * params);
};
void Box::Method(void * someparams)
{
myCat = new Cat( &Task ); // не сработает
// error C2276: '&' :
// illegal operation on bound member function expression
}Offline
#2 20.05.09 01:49
Re: [C++]Указатель на функцию-член класса
Код: cpp:
class Cat { public: Cat(void * (* routine) (void * params)){} }; class Box { public: void Method(void * someparams); private: Cat * myCat; static void * Task(void * params){return 0;} }; void Box::Method(void * someparams) { myCat = new Cat( &Box::Task ); }
Код: cpp:
class Box; class Cat { public: Cat(void * (Box::* routine) (void * params)){} }; class Box { public: void Method(void * someparams); private: Cat * myCat; void * Task(void * params){return 0;} }; void Box::Method(void * someparams) { myCat = new Cat( &Box::Task ); }
Offline
#3 23.05.09 19:22
Re: [C++]Указатель на функцию-член класса
Я не силён в C++, но разве мы не можем получить указатель на метод экземпляра класса не делая его статическим (со статическим методом ясное дело - проблем нет)?
Кроме того меня смущает, что метод Task, указатель на который передаётся, является приватным... Или при обращении к функции через указатель это не имеет значения?
Offline

