![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
IEHBR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 22.9.2004 Репутация: нет Всего: нет |
экспериментировал с указателями на функцию
если приравнивать от функции класса то не прокатывает прокатывает тока тада если определить функцию как static или сделать её глобальной а не хотелось бы... мона как нить этого избежать? Код: typedef void*(*MYFUNC)(...); /*...*/ MYFUNC a; a = (MYFUNC) tmes->AuthClient; //где tmes - указатель на экземпляр //класса a(); |
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Скажи пожалуйста, а к членам какого экземпляра этого класса будет эта функция иметь доступ? Не знаешь? Ну вот и компилятор не знает.
Если в билдере пишешь, то привязаться можно с помощью __closure. А вообще - нельзя так делать. Пока, по крайней мере. |
|||
|
||||
IEHBR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 22.9.2004 Репутация: нет Всего: нет |
class b
{ public: void test(); }; .... void(b::*FUNC_P)(); FUNC_P = &b::test; // take a method's address .... //usage b a_1; (a_1->*FUNC_P)(); // call via method's pointer Вызов метода без объекта - ошибка! Добавлено @ 14:12 а то - нельзя нельзя.... все можно ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Для всех экземпляров функций создается одна копия каждой функции...просто вместе с остальными переменными передаеться также невидимый this и простой ковертацией здесь не обойтись. static функциям указатель this не передается, вот потому то и работает... IEHBR Так - другое дело... |
|||
|
||||
S.A.P. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
Это то понятно. У тебя же экземпляр уже создан, пробле с определением адреса нет. А мне вот интересно this.func; вернет адрес функции, если я воспользуюсь этим в самом классе (например в конструкторе)??? . Это сообщение отредактировал(а) Perchilla - 4.2.2005, 15:00 |
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Конечно, но в первом посте ты не пытался ->* применить, который, как я понимаю, так и делает, как azesmcar говорит: еще и this передает.
это точно. Но можно создавать не простой указатель на функцию, а "умный", который будет хранить также и сам объект. Паттерн Command, короче говоря. |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Стопудово можно! Создавай! Только при вызове метода, не забывай определять указатель на класс (который this) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |