указатель на метод класса ?
От: Аноним  
Дата: 17.05.06 07:36
Оценка:
есть класс

class CFoo
{
public:
    void SomeMethod(int){};
};


как получить указатель на CFoo::SomeMethod() ?
чтобы мона было по полученному адресу вызывать метод CFoo::SomeMethod.
Re: указатель на метод класса ?
От: Bell Россия  
Дата: 17.05.06 07:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть класс


А>
А>class CFoo
А>{
А>public:
А>    void SomeMethod(int){};
А>};
А>


А>как получить указатель на CFoo::SomeMethod() ?

А>чтобы мона было по полученному адресу вызывать метод CFoo::SomeMethod.


typedef void (CFoo::* CFooMemFn)(int);//Для удобства
int main()
{
   void (CFoo::*memfn)(int) = &CFoo::SomeMethod;//Амперсанд обязателен!
   CFooMemFn memfn2 = memfn;
   CFoo obj;
   CFoo* ptr = &obj;

   (obj.*memfn)(10);
   (ptr->*memfn2)(10);

   return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[2]: указатель на метод класса ?
От: Ubivetz Украина  
Дата: 17.05.06 09:49
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>есть класс


А>>
А>>class CFoo
А>>{
А>>public:
А>>    void SomeMethod(int){};
А>>};
А>>


А>>как получить указатель на CFoo::SomeMethod() ?

А>>чтобы мона было по полученному адресу вызывать метод CFoo::SomeMethod.


B>
B>typedef void (CFoo::* CFooMemFn)(int);//Для удобства
B>int main()
B>{
B>   void (CFoo::*memfn)(int) = &CFoo::SomeMethod;//Амперсанд обязателен!
B>   CFooMemFn memfn2 = memfn;
B>   CFoo obj;
B>   CFoo* ptr = &obj;

B>   (obj.*memfn)(10);
B>   (ptr->*memfn2)(10);

B>   return 0;
B>}
B>


Тока если ты хочешь определить у себя в классе, по каким-то своим соображениям, указатель на метод класса (т.е как это де-факто сделано с событиями и их обработчиками в VCL), то единственный путь для тебя — использовать (Borland specific) ключевое слово

__closure
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re[3]: указатель на метод класса ?
От: Angler Россия  
Дата: 17.05.06 10:36
Оценка:
Здравствуйте, Ubivetz, Вы писали:


U>то единственный путь для тебя — использовать (Borland specific) ключевое слово


U>
U>__closure
U>


Почему единственный? Есть boost::function и синки. В конце концов можно хранить пару : указатель на объект + указатель на метод объекта.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.