Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможно ли сделать список функций  (Прочитано 4966 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anonymous
Гость
« : 03-07-2004 17:16 » 

Кто знает как
сделать список функций вобщето не список а map
вот такого типа map < ID_OPERATION,  function* >;
Уточняю функции пренадлижат Классу и
функции небольшие 3 - 7 строк

Подскажите для это только STL годиться или ATL, WTL или MFC
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 03-07-2004 22:33 » 

Гость, что значит принадлежит классу?
Метод объекта? Статический метод класса?

Тип ID_OPERATION ?

Наиболее общее решение сделать функтор -- класс с оператором вызова ()
Конструктору класса передаётся функция, а оператор вызова соответственно вызывает эту функцию.

Далее можно воспользоваться любым ассоциативным массивом из нужного пакета классов, построить отображение из типа ID в сделанный класс-функтор.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Anonymous
Гость
« Ответ #2 : 04-07-2004 15:58 » 

npak
Принадлежит классу это значит
просто класс CMedia имеет метод Playitem()

ID_OPERATION это вобщето UINT
переменая  ID_OPERATION просто служит
для распознавания операции моей программы

Пример дожно быть примерно так
map.insert < idPlay, OnPlayItem())
map.insert  < idStop, OnStopItem())
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 04-07-2004 21:49 » 

Цитата
map.insert ( idPlay, OnPlayItem())

Этот пример возможен только со статическими методами класса.  Для нестатических надо делать так: map.insert ( idPlay, &CMedia::OnPlayItem )
Код:
class CMedia {
const char * _song_name;
public:
CMedia( const char * song ) : _song_name( song ) {}
void OnEventDefault(void) {std::cout << _song_name << " no method\n"; }
void OnPlayItem(void) { std::cout << _song_name << " play\n" ;}
void OnStopItem(void) { std::cout << _song_name << " stop\n" ;}
};

typedef void (CMedia::*OnEvent)(void);

class CMediaMap {
CMedia & _media;
std::map<int, OnEvent> _map;
public:
CMediaMap( CMedia& media ) : _media( media ) {};
void insert( int eventID, OnEvent handler ) { _map[ eventID ] = handler; }
void operator ()(int eventID) {
OnEvent handler = &CMedia::OnEventDefault;
if ( _map.find( eventID ) != _map.end() ) {
handler = _map[ eventID ];
}
( _media.*(handler) )();
}
};

int main()
{
CMedia song( "Yesterday" );
CMediaMap song_map( song );

song_map.insert( 0, &CMedia::OnPlayItem );
song_map.insert( 1, &CMedia::OnStopItem );
song_map( 0 );
song_map( 1 );
song_map( 2 );
return 0;
}

Результат:
Цитата
Yesterday play
Yesterday stop
Yesterday no method
« Последнее редактирование: 29-11-2007 20:57 от Алексей1153++ » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Гость
Гость
« Ответ #4 : 08-07-2004 10:37 » new

npak
Отлично пример работает

Хотел с бы узнать можно ли такой же map список функций,
но чтобы в спикок можно было дабовлять любые функции
независимо принадлежат ли эти функции классу или нет
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines