![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Всем привет.
Почитал похожие темы и мало-что понял, поэтому решил всё-таки спросить. У меня есть класс, в который я должен передавать указатель на некую функцию-обработчик :
Шаблон T определяет тип данных, а с помощью шаблона класса A я стал выкручиваться из ошибки, связанной с тем, что передаваемый указатель на функцию (являющуюся членом другого класса) имеет соглашение __thiscall :
Правильно ли так действовать? = Или можно как-то обойтись без шаблона A? Научите, пожалуйста, как это нормально делают. Это сообщение отредактировал(а) marcusmae - 5.10.2007, 11:37 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
[quote=archimed7592, 5.10.2007, 14:28, post1277470]
А не проще ли написать
[quote] Тогда на
говорит, что term does not evaluate to a function taking 2 arguments. -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Слушай, оно у тебя вообще работает?
Вот это, извини, малость бред(то же самое, что написать x = x;).
Ну да, не заметил. А зачем тебе это поле? Оно же не способно хранить thiscall. В общем вот тебе пример, додумай сам, что именно тебе нужно...
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
да-да, там должен стоять valueInitializer, и это не работает, тк проблему thiscall мне решить не удаётся В примере дайте, пожалуйста, хоть на код классов посмотреть... Сам пытался вот по этим матерьялам научиться. Блин, всего-то надо передать указатель на функцию-член другого класса, хранить его и запускать функцию по её указателю. Вот в C# бросил тип делегата в качестве аргумента, и всё работает. В плюсах же такое впечатление, что для этого надо лбом об стенку разбиться. Это сообщение отредактировал(а) marcusmae - 5.10.2007, 17:25 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Вчера всё внимательно посмотрел и понял, что мне не хватает одного : ссылки на экземпляр класса, в котором живёт функция-обработчик, передаваемая по указателю. И ещё привелся к __cdecl :
Соответственно, использующие сие классы стали свои функции тоже держать в __cdecl и передавать ссылку на себя в конструктор :
И это работает. archimed7592, спасибо за Ваши примеры -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |