LINUX.ORG.RU

Как в функции-методе внутри класса передать в качестве параметра адрес функции-метода этого же класса?


0

0

Кто подскажет - как в функции-методе внутри класса передать в качестве параметра адрес функции-метода этого же класса? И можно-ли это в принципе сделать? Ниже простенький пример:

#include <stdio.h> #include <unistd.h> #include <pthread.h> class aaa { public: void *func(void*); void b(); }; void *aaa::func(void* arg) { while(1) { printf("Phtread !\n"); sleep(2); } }; void aaa::b() { pthread_t ptr; pthread_create(&ptr,NULL,func,NULL); while(1) { printf("Main !\n"); sleep(1); } }; main() { aaa c = aaa(); c.b(); }

anonymous

Функция, для которой на которую нужно получить указатель, должна быть static

Dead ★★★★
()
Ответ на: комментарий от Dead

Спасибо.Это работает в случае, когда в этой функции не используются переменные и методы класса. Но как выкрутиться, если в методе static нужно работать с перемеменными и методами класса, которые не объявлены как static? Хотя бы возвать один другой метод. В инете на эту тему много чего, но уж больно все расплывчато.

anonymous
()
Ответ на: комментарий от anonymous

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

class aaa 
{
    static void *doit(void*);
public:
    void a();
    void b();
    void print() { puts("Thread!"); }
};

void
aaa::a()
{
    while(1) 
    { 
	puts("Main!"); 
	sleep(2); 
    } 
}

void 
aaa::b()
{ 
    pthread_t ptr; 
    pthread_create(&ptr, NULL, doit,(void*)this); 
}

void*
aaa::doit(void *arg)
{
    aaa *a = (aaa*)arg;

    for(;;)
    {
	a->print();
	sleep(1);
    }
}

main() 
{ 
    aaa c = aaa();
    c.b();
    c.a();
    return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

Большое спасибо. Красиво и просто. Множество раз проделывал это же с self в Python, а тут пролет из=за привычно неявного this. Матчатсь учить надо!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.