forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Укозатель на метод класса (http://forum.boolean.name/showthread.php?t=15353)

genroelgvozo 25.08.2011 21:54

Ответ: Укозатель на метод класса
 
Хм, интересно
и таким образом функцию, которая принимает метод и обьект, можно сделать шаблонной, чтоб отойти от типизации
и тогда мне опять не понятно, а нафига boost?

Dream 26.08.2011 01:58

Ответ: Укозатель на метод класса
 
по поводу указателей и вообще реализации делегатов на С++
http://www.rsdn.ru/article/cpp/delegates.xml

alcoSHoLiK 26.08.2011 02:21

Ответ: Укозатель на метод класса
 
Как вариант, можно написать функцию-обертку, которая сохранит указатель this. Получится некое подобие замыкания для частного случая.

Код:

int net_thread_wrapper(void *data, net *this = 0) {
    static net *that;
    if (this) {
        that = this;
        // больше ничего не делаем, чтобы не вызвать изменений в this
        return 0;
    }
    return that->thread(data);
}

Первый раз вызываем функцию с двумя параметрами, в ней сохранится указатель на this. Затем можно передавать указатель на функцию в либу. Важно только, чтобы время жизни экземпляра, который был передан под видом this, было достаточным для целей либы.

Код:

net *instance = new net();
net_thread_wrapper(NULL, instance);
SDL_CreateThread(&net_thread_wrapper, &timeout); 

// ...

delete instance;

Наверняка понадобится каст, чтобы успокоить компилятор. На работоспособность этого подхода он не должен повлиять. Отпишись о результатах, пожалуйста.


Часовой пояс GMT +4, время: 12:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot