есть класс
class CFoo
{
public:
void SomeMethod(int){};
};
как получить указатель на CFoo::SomeMethod() ?
чтобы мона было по полученному адресу вызывать метод CFoo::SomeMethod.
Здравствуйте, Аноним, Вы писали:
А>есть класс
А>А>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;
}
Здравствуйте, 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
Здравствуйте, Ubivetz, Вы писали:
U>то единственный путь для тебя — использовать (Borland specific) ключевое слово
U>U>__closure
U>
Почему единственный? Есть boost::function и синки. В конце концов можно хранить пару : указатель на объект + указатель на метод объекта.