Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация событий в С++ 
:(
    Опции темы
sofenru
Дата 2.11.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.10.2010

Репутация: нет
Всего: нет



Мне нужно реализовать события, как в Дельфи или С++ Builder, на Visual C++. Но стандартный С++ не поддерживает указатели на функции-члены класса. В своём блоге http://c3plus.ru за 02.11.10, я попытался расписать, как это можно было бы реализовать, но получилось уж слишком громоздко... А как сделать проще?
PM MAIL   Вверх
azesmcar
Дата 2.11.2010, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(sofenru @  2.11.2010,  08:52 Найти цитируемый пост)
Но стандартный С++ не поддерживает указатели на функции-члены класса. 

чего???

Цитата(sofenru @  2.11.2010,  08:52 Найти цитируемый пост)
Мне нужно реализовать события

boost::signals

Цитата(sofenru @  2.11.2010,  08:52 Найти цитируемый пост)
своём блоге http://c3plus.ru за 02.11.10, я попытался расписать, как это можно было бы реализовать, но получилось уж слишком громоздко... 

Может сперва стоит как следует изучить возможности языка, а потом писать блог? Пиши для себя сколько угодно, ради бога, только не надо это публиковать и других с толку сбивать. В C++ ЕСТЬ! указатели на функции-члены, поищи в google.


Это сообщение отредактировал(а) azesmcar - 2.11.2010, 09:10
PM   Вверх
mes
Дата 2.11.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



 
Цитата(sofenru @  2.11.2010,  07:52 Найти цитируемый пост)
 своём блоге http://c3plus.ru за 02.11.10,

  smile smile  smile 
  
Цитата(azesmcar @  2.11.2010,  07:55 Найти цитируемый пост)
 Пиши для себя сколько угодно, ради бога, только не надо это публиковать и других с толку сбивать.

smile
или хотя бы разбавляйте фразами типа:  "как мне представляется", "хотя я не до конца разобрался в вопросе", "учитывая мой недолгий опыт"
smile


--------------------
PM MAIL WWW   Вверх
xvr
Дата 2.11.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(azesmcar @  2.11.2010,  08:55 Найти цитируемый пост)
чего???
ТС 'слегка' перепутал closure указатели с member указателями, а судя по его блогу, он еще много чего перепутал  smile 


PM MAIL   Вверх
Леопольд
Дата 2.11.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



sofenru, читаю Ваш блог, и посещает меня, уже забытое чуство стыда. Это психологический эксперимент на сопереживание?  smile 

Это сообщение отредактировал(а) Леопольд - 2.11.2010, 12:48


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Alexeis
Дата 2.11.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Сигналы это уже тяжелая артиллерия. Можно чуть более просто
boost::function - описываем тип-шаблон события.

boost::bind - шаблонная функция для связывания

Вот пример связывания объектного обработчика с событием
Код

boost::bind(&CmdListConnect::ReadClbk, this, _1)

результат bind будет объект типа boost::function<> ;

Безусловно этот способ не очень красивый и прозрачный, но использовать можно.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sofenru
Дата 2.11.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.10.2010

Репутация: нет
Всего: нет



Цитата

Но стандартный С++ не поддерживает указатели на функции-члены класса. 

чего???


Ну так... не поддерживается... ))) Иначе, зачем тогда всё это реализовывать с помощью библиотеки boost???

Так как я пишу свою библиотеку, то завязывание на чужие либы (будь то буст или другая) никак не приемлемо... Я всем представляю либу, которая будет весить едва ли метр, но для её работы необходимо скачать несколько различных других библиотек на десятки или сотни килобайтов)))

Цитата

ТС 'слегка' перепутал closure указатели с member указателями, а судя по его блогу, он еще много чего перепутал  smile 


Поясните, плиз, подробнее.. что я перепутал в этот раз?

Цитата

sofenru, читаю Ваш блог, и посещает меня, уже забытое чуство стыда. Это психологический эксперимент на сопереживание?  smile 


думаю, что нет.... в такой форме намного веселее писать сложные программы... тем более, что мой проект просто обречён на успех!!!  smile 
PM MAIL   Вверх
azesmcar
Дата 2.11.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(sofenru @  2.11.2010,  14:38 Найти цитируемый пост)
Ну так... не поддерживается... ))) 

опять...каким образом связаны сигналы и указатели на функцию-член? ты хоть по ссылке зашел в google? почитал?

Цитата(sofenru @  2.11.2010,  14:38 Найти цитируемый пост)
Так как я пишу свою библиотеку, то завязывание на чужие либы (будь то буст или другая) никак не приемлемо... Я всем представляю либу, которая будет весить едва ли метр, но для её работы необходимо скачать несколько различных других библиотек на десятки или сотни килобайтов)))

ну ну..желаю удачи в разработке сотни тысяч велосипедов.

Цитата(sofenru @  2.11.2010,  14:38 Найти цитируемый пост)
Я всем представляю либу, которая будет весить едва ли метр, но для её работы необходимо скачать несколько различных других библиотек на десятки или сотни килобайтов)))

поверь мне, кроме тебя твоя либа никому не нужна, а boost сегодня есть практически у каждого C++ программиста.

PM   Вверх
Master01
Дата 2.11.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007

Репутация: 2
Всего: 2




ну вес либы не принципиален smile а вот надёжность, безопасность, масштабируемость и пр. очень даже smile
PM MAIL   Вверх
Alexeis
Дата 2.11.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(sofenru @  2.11.2010,  15:38 Найти цитируемый пост)
Ну так... не поддерживается... ))) Иначе, зачем тогда всё это реализовывать с помощью библиотеки boost???

  Для того чтобы упростить синтаксис и избежать написания повторяющегося кода.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
boostcoder
Дата 2.11.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



тов. sofenru мне очень напоминает спам-бота и рекламщика и клоуна в одном лице.
читаю тему, и не знаю, смеяться или плакать... smile

Добавлено @ 15:09
Цитата(sofenru @  2.11.2010,  08:52 Найти цитируемый пост)
Но стандартный С++ не поддерживает указатели на функции-члены класса.

куда Бьярне смотрел? smile 

Это сообщение отредактировал(а) boostcoder - 2.11.2010, 15:10
PM WWW   Вверх
sofenru
Дата 2.11.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.10.2010

Репутация: нет
Всего: нет



Цитата

опять...каким образом связаны сигналы и указатели на функцию-член? ты хоть по ссылке зашел в google? почитал?


Цитата

Но стандартный С++ не поддерживает указатели на функции-члены класса.

куда Бьярне смотрел? smile 


искал - нету.... ну тогда дайте пример! smile  но, плиз, без буста!!!

Цитата

тов. sofenru мне очень напоминает спам-бота и рекламщика и клоуна в одном лице.
читаю тему, и не знаю, смеяться или плакать... smile


 smile  smile  smile 

не люблю спам, но могу двигать сайты в инете smile  думаю, что всё-таки я не клоун  smile , но юмор люблю... 
даже не сумневайся... всё-таки, данный проект ближе к серьёзному... я действительно хочу написать либу и писать на ней проги... думаю, у меня это получиться... 

Это сообщение отредактировал(а) sofenru - 2.11.2010, 15:27
PM MAIL   Вверх
azesmcar
Дата 2.11.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(sofenru @  2.11.2010,  15:26 Найти цитируемый пост)
искал - нету.... ну тогда дайте пример! smile  но, плиз, без буста!!!

По первой же ссылке в google.
Код

class Fred {
public:
   int f(char x, float y);
   int g(char x, float y);
   int h(char x, float y);
   int i(char x, float y);
   ...
};
 
// FredMemFn points to a member of Fred that takes (char,float)
typedef  int (Fred::*FredMemFn)(char x, float y); 


PM   Вверх
sofenru
Дата 2.11.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.10.2010

Репутация: нет
Всего: нет



azesmcar, спасибо, но НАВЕРНОЕ (хотя тут с вами не в чём не уверен  smile  ) немного не то... как заставить работать следующий код:

Код

#include <iostream>
 
class Object {
public:
    Object() {}
};

class Button : public Object {
public:
    Button() {}
    EventClick onClick; // Нужно перед этим как-то описать EventClick 
};

class Form : public Object {
public:
    Form() {}
    virtual void out(int value) { 
        std::cout << value << std::endl;
    }
};

int main(int argc, char* argv[])
{
    Form *form = new Form();
    Button *button = new Button();
    button->onClick = form->out; // Эта функция должна вызываться по событию onClick кнопки button

    button->onClick(10); // вызываем событие нажатия кнопки с каким-то параметром

    return 0;
}



PM MAIL   Вверх
xvr
Дата 2.11.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(sofenru @  2.11.2010,  14:38 Найти цитируемый пост)
Ну так... не поддерживается... ))) Иначе, зачем тогда всё это реализовывать с помощью библиотеки boost???

Предлагаю для творчества sofenru сделать отдельный раздел - что бы не нам одним было так весело   smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.