указатели на метод класса
От: Pavel Kokorin Россия  
Дата: 15.11.06 13:45
Оценка: :)
Добрый день!

У меня возник вопрос по поводу получения указателя на функцию класса. Имеется следующий код.

struct CClass
{
    LRESULT CALLBACK SendEditWndProc(HWND,UINT,WPARAM,LPARAM) {return 0;}
};

...
int main()
{
    CClass cl;
    ...
    LONG (__stdcall CChatDlg::*pCM)(HWND,UINT,WPARAM,LPARAM) = &CClass::SendEditWndProc;

    LONG p_fn = (???)(cl.*pCM); // т.е. хочется, чтобы в p_fn лежал адрес функции в экземпляре cl
    ...
}


Возможно ли вообще сделать так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: указатели на метод класса
От: np9mi7 Россия  
Дата: 15.11.06 14:43
Оценка: 2 (1)
Здравствуйте, Pavel Kokorin, Вы писали:

PK>Возможно ли вообще сделать так?


В общем случае нет. Почитай Указатели на функции-члены и реализация самых быстрых делегатов на С++
Автор(ы): Don Clugston
Дата: 27.07.2005
В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере.
, там описано как и кто хранит указатели на функции члены в зависимости от компилятора;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
Re: указатели на метод класса
От: Кодт Россия  
Дата: 15.11.06 15:55
Оценка:
Здравствуйте, Pavel Kokorin, Вы писали:

PK>У меня возник вопрос по поводу получения указателя на функцию класса.


Этот вопрос постоянно возникает — особенно по поводу WindowProc. Ну и других callback-функций тоже.
Поиск по сайту тебе очень сильно поможет.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: указатели на метод класса
От: remark Россия http://www.1024cores.net/
Дата: 15.11.06 15:58
Оценка:
Здравствуйте, Pavel Kokorin, Вы писали:

PK> т.е. хочется, чтобы в p_fn лежал адрес функции в экземпляре cl


У экземпляров объектов нет своих копий функций-членов, функция-член одна на класс, а не на объект.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.