Официальный сайт студ.городка НГТУ
Программирование и БД » [C++]Указатель на функцию-член класса 

#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

#4  28.05.09 23:40

Я
Профиль

Re: [C++]Указатель на функцию-член класса

efferson, Не можем. Ибо твоя функция получая указатель на метод, понятия не имеет о том, какому объекту ты подразумевал ее прописать. Тебе конечно все равно, но разгребать то компилятору.

Offline

Программирование и БД » [C++]Указатель на функцию-член класса 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.041 сек.
Выполнено 11 запросов.