![]() |
|
Модераторы: bsa |
![]()
|
|
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Всем привет.
Мне необходимо как-то хранить в массиве или другой структуре ссылки на различные функции. Для того чтобы можно было в цикле обойти этот массив и вызвать эти функции. Функции могут быть самыми разнообразными, но входные параметры у них всех одинаковые. Разные тела функций. Если быть точнее, то дело обстоит так: Создается объект. При этом вызывается его конструктор, который должен "регистрироваться" в некой структуре данных. Удобнее всего сделать для этого свою функцию и конструктор обращается к ней, передавая некоторые параметры, среди которых ссылка на один из своих методов. Далее программа работает и когда происходит определенное событие необходимо вызвать все методы всех объектов которые "зарегистрировались" тогда. Трудность заключается в том, что у меня опыт программирования на С++ еще маленький... Как сделать ссылку на метод объекта я еще могу догадаться, но проблема в том что в том массиве, куда надо засунуть эти ссылки все элементы должны быть одного типа, а функции все разные, следовательно и ссылки на них разного типа.. как засунуть их в один массив не понимаю. Подскажите, пожалуйста, как быть. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 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 |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Ну это методы объектов. Входные параметры одинаковые можно сделать. Имя метода тоже можно сделать одинаковым
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Типы объектов разные?
Это сообщение отредактировал(а) archimed7592 - 9.12.2007, 19:46 -------------------- 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 |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Вот объекты да... могут быть самыми различными..
Вообще для чего мне это- я пишу системную библиотеку на С++ для операционной системы Kolibri OS... И делаю объектный интерфейс с различным визуальным компонентам... кнопкам, чек боксам и т.д... Один объект- один элемент... При создании объекта он регистрируется, говоря системе о том какие события он хочет получать от системы... а когда они происходят система должна сообщать об этом компоненту, вызывая его обработчик событий |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Ааа, ну тогда есть два варианта развития событий:
1. Написание своего узкоспециализированного велосипеда. 2. Использование массива boost::function. Для первого придётся разобраться с шаблонами. Для второго придётся скачать несколько мегобайт и распаковать в определённую папку. По времени одно и то же, только второй вариант более универсальный(читай почти ничем не ограничен). -------------------- 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 |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Дело в том что вся графическая операционка Kolibri OS с кучей приложений влезает на дискету ) Если я буду использовать какую-то штуку размером в песколько мегабайт в своей библиотеки люди меня не поймут )
Добавлено через 1 минуту и 48 секунд Я вообще не могу использовать никакие стандартные библиотеки... так как их нет в Kolibri OS и вообще там сделано все совсем иначе... Библиотека моя- всего лишь обертка на операторы _asm {} в теле которых находятся системные вызовы ядра жтой ОС... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
А компилятор какой?
|
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Visual C++
Добавлено через 1 минуту и 26 секунд Если интересно как их под VC потом все работает под Kolibri OS- есть специальная программка, которая заголовки у бинарников меняет... и еще там что-то переделывает... и после этого бинарник запускается спокойно под Kolibri.... главное чтоб не использовал ничего виндозного |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
rcdimon, бери boost::function. Это просто заголовочный файл по сути.
|
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Если можно, привидите, пожалуйста, пример с его использованием
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 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 |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Пишет что у меня нет такой библиотеки... где ее можно скачать?
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
boost.org
-------------------- 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 |
|||
|
||||
| rcdimon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: нет Всего: 2 |
Эту библиотеку решил не использовать... и обойтись просто ссылками на обычные глобальные функции. Но и тут не все получается.
объявляю класс, один из методов которого должен принимать ссылку на глобальную функцию
в ответ ошибка
в чем дело? Неужели методу нельзя передать в качестве параметра ссылку на функцию? |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |