Модераторы: 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   Вверх
boostcoder
Дата 2.11.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



sofenru, std::function и std::bind уже в стандарте, даже в микрософт компиляторе smile 
а вы просто не понимаете о чем говорите smile 

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


Новичок



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

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



Цитата

ТС 'слегка' перепутал closure указатели с member указателями


ну да... мне нужны closure smile

Цитата

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


скоро либа заработает и уже станет не совсем смешно... я предлагаю скромное компромиссное решение - ввести на винграде следующие топики:

C/C++/С+++: Для новичков
C/C++/С+++: Общие вопросы
C/C++/С+++: Программирование под Unix/Linux

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


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


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

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



Цитата(sofenru @  2.11.2010,  15:21 Найти цитируемый пост)
.. как заставить работать следующий код:

слишком много букв.. лень читать билдероподобный код...  вот Вам для разминки 
http://liveworkspace.org/code/287fc928cb9a...f4a88e24056794b
Код

#include <iostream>
#include <functional>

struct btn {
   std::function<void(btn*)> on_click;

   void click () { on_click (this); }
   
   void push () { std::cout << "pushed"; }
};

int main ()
{
   btn _btn;
   _btn.on_click = [](btn* sender) { sender->push(); };
   
  _btn.click();
}

 smile 


Это сообщение отредактировал(а) mes - 2.11.2010, 16:58


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


pattern`щик
****


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

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



Цитата(sofenru @  2.11.2010,  16:51 Найти цитируемый пост)
скоро либа заработает и уже станет не совсем смешно...

точно сказано smile 
все будут плакать от того "как" она написана smile 
PM WWW   Вверх
mes
Дата 2.11.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  2.11.2010,  15:59 Найти цитируемый пост)
все будут плакать от того "как" она написана  

smile, многие уже пошли готовиться.. 
 smile 

Это сообщение отредактировал(а) mes - 2.11.2010, 17:03


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


Новичок



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

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



mes, 
Выдаёт ошибку "function : is not a member of std" вот в этой строчке:
   std::function<void(btn*)> on_click;
PM MAIL   Вверх
mes
Дата 2.11.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(sofenru @  2.11.2010,  16:03 Найти цитируемый пост)
Выдаёт ошибку "function : is not a member of std"

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



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


pattern`щик
****


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

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



Цитата(sofenru @  2.11.2010,  17:03 Найти цитируемый пост)
Выдаёт ошибку

по приведенной ссылке, все работает.
у вас наверное компилятор не "обычный" smile 

сейчас начнется срач

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


Новичок



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

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



boostcoder, я согласен, что boost очень хорошая и продвинутая библиотека и хорошо, что её включили в визуал 10! Но я не готов её использовать в данный момент... Ну вот нужно сделать без неё, тем более здесь пишут, что это очень просто... )

Добавлено через 1 минуту и 21 секунду
mes, у меня стоит Microsoft Visual 2008 ... ставить 2010 или boost?

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


pattern`щик
****


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

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



Цитата(sofenru @  2.11.2010,  17:07 Найти цитируемый пост)
хорошо, что её включили в визуал 10!

это было бы действительно хорошо, будь это правдой smile 
PM WWW   Вверх
sofenru
Дата 2.11.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 2.11.2010,  17:10)
Цитата(sofenru @  2.11.2010,  17:07 Найти цитируемый пост)
хорошо, что её включили в визуал 10!

это было бы действительно хорошо, будь это правдой smile

Цитата

это было бы действительно хорошо, будь это правдой smile


вроде читал когда-то, что хотели включить...
PM MAIL   Вверх
mes
Дата 2.11.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



sofenru, вот велосипедно, для сравнения, в том стиле, что просили :
http://liveworkspace.org/code/d9f8501d0320...e817d2869b7dece
П.С. грязь из за спешки 

Добавлено через 6 минут и 22 секунды
Цитата(sofenru @  2.11.2010,  16:07 Найти цитируемый пост)
mes, у меня стоит Microsoft Visual 2008 ... ставить 2010 или boost?

хм.. смотря что хотите smile
ну а в принципе, если хотите не тратиться на велосипеды и  быстрей выпустить свою либу   smile, то лучше и то другое.. 
smile

Добавлено через 13 минут и 17 секунд
вспомнил, есть еще мальнькая библиотечка (поиск по словам winnie closure) может помочь решить мелкие вопросики и возможно утолить любопытство..
smile


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


Амеба
Group Icon


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

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



Цитата(sofenru @  2.11.2010,  18:07 Найти цитируемый пост)
у меня стоит Microsoft Visual 2008

  У меня boost нормально работает с Microsoft Visual 2005. Так что не нужно ни каких особых версий. Кстати выше речь шла о том что function<> добавили в STL. В 2010 студии и нет необходимости для этого подключать буст.


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

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

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


pattern`щик
****


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

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



Цитата(Alexeis @  2.11.2010,  17:46 Найти цитируемый пост)
выше речь шла о том что function<> добавили в STL, в 2010 студии и нет необходимости для этого подключать буст.

какой-то двойственный смысл...
PM WWW   Вверх
Alexeis
Дата 2.11.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



<functional> это же библиотека STL . Раз они добавили в нее std::function<>, то нет необходимости использовать boost::function<> . 


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

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

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


pattern`щик
****


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

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



Цитата(Alexeis @  2.11.2010,  17:56 Найти цитируемый пост)
Раз они добавили в нее std::function<>, то нет необходимости использовать boost::function<> .

понял.
в предыдущем посте, запятая сбивала с толку.
PM WWW   Вверх
azesmcar
Дата 2.11.2010, 19:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(sofenru @  2.11.2010,  16:21 Найти цитируемый пост)
azesmcar, спасибо, но НАВЕРНОЕ (хотя тут с вами не в чём не уверен  smile  ) немного не то... 

что значит не то, это указатель на member функцию, а что ты под этим подразумевал я не знаю smile 

Цитата(sofenru @  2.11.2010,  16:21 Найти цитируемый пост)
как заставить работать следующий код:


Цитата(sofenru @  2.11.2010,  16:21 Найти цитируемый пост)
Эта функция должна вызываться по событию onClick кнопки button

но ты забыл очень важную вещь. Эта функция не просто функция, это функция - член класса и вызывается она не просто так а для конкретного объекта. Для какого объекта она должна вызываться?

sofenru
не изобретай велосипеды, здесь уже чуть ли не все посетители раздела тебе сказали, что ты ерундой занимаешься. Займись чем нибудь полезным. Я думаю на данном этапе для тебя самым полезным будет более детальное изучение языка. Почитай лучше несколько умных книг вместо копирования классов из Дельфи.

Цитата(sofenru @  2.11.2010,  17:14 Найти цитируемый пост)
вроде читал когда-то, что хотели включить... 

включить его (кстати далеко не весь) хотели в новый стандарт и включили кстати, просто стандарт пока не вышел и компиляторы его поддерживают частично. В VS2010 кое-что есть, но gcc 4.5.1 на порядок опережает по части экспериментальной поддержки нового стандарта.

Цитата(sofenru @  2.11.2010,  16:51 Найти цитируемый пост)
скоро либа заработает и уже станет не совсем смешно... я предлагаю скромное компромиссное решение - ввести на винграде следующие топики:

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


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


Новичок



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

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



Цитата(mes)

вспомнил, есть еще мальнькая библиотечка (поиск по словам winnie closure) может помочь решить мелкие вопросики и возможно утолить любопытство..
smile


Ага спасибо... сделал на ней... причём автор утверждает, что его способ это "что-то типа boost::function, но без использования динамической памяти" ... то есть, как я понимаю, даже намного круче!!! smile

а вот, что он пишет про boost::functional 

Цитата(Winnie)

Но она (то есть, boost::functional) имеет более неудобный синтаксис (когда у метода есть параметры, приходися писать так – boost::bind(&MyClass::OnClick, this, _1, _2)

И второе, что более важное, она гораздо менее эффективна. Дело в том, что внутри используется динамическое выделение памяти для каждого объекта функции, и соответственно это работает медленно и фрагментирует кучу.


Цитата(mes)

.... быстрей выпустить свою либу   smile, то лучше и то другое.. 


уже выложил версию 0.3 - можно выводить простейшие окошки... скоро уже буду элементики накидывать )

Это сообщение отредактировал(а) sofenru - 3.11.2010, 18:50
PM MAIL   Вверх
boostcoder
Дата 3.11.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(sofenru @  3.11.2010,  18:48 Найти цитируемый пост)
Ага спасибо... сделал на ней... причём автор утверждает, что его способ это "что-то типа boost::function, но без использования динамической памяти" ... то есть, как я понимаю, даже намного круче!!! 

а вот, что он пишет про boost::functional 

Цитата(Winnie)

Но она (то есть, boost::functional) имеет более неудобный синтаксис (когда у метода есть параметры, приходися писать так – boost::bind(&MyClass::OnClick, this, _1, _2)

И второе, что более важное, она гораздо менее эффективна. Дело в том, что внутри используется динамическое выделение памяти для каждого объекта функции, и соответственно это работает медленно и фрагментирует кучу.

ну что тут скажешь... аффтар явно недорос до буста(как и ты) smile 
на самом деле, таким людям, не нужно ничего объяснять. такие тоже нужны...все знают для чего smile 

Цитата(sofenru @  3.11.2010,  18:48 Найти цитируемый пост)
уже выложил версию 0.3

уже страшно
ты случаем свою ОСь и аналог фотошопа не писал раньше? кого-то ты очень напоминаешь smile

Добавлено через 6 минут и 32 секунды
Цитата(sofenru @  3.11.2010,  18:48 Найти цитируемый пост)
внутри используется динамическое выделение памяти для каждого объекта функции, и соответственно это работает медленно и фрагментирует кучу.

кстати.
я полагаю, ты не тупое стадное быдла ищущее смысл в быдловизоре, и посему к тебе вопрос:
из слов "того" аффтара о boost::function, ты понял, что это не хорошо, и сформировал для сепя позицию. так вот, пожалуйста, объясни, чем плохо динамическое выделение памяти, и почему(как) происходит фрагментация кучи? а так же, приведи доказательство того, что boost::function выделяет динамическую память.

спасибо.

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


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


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

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



Цитата(sofenru @  3.11.2010,  17:48 Найти цитируемый пост)
причём автор утверждает, что его способ это "что-то типа boost::function, но без использования динамической памяти" ... то есть, как я понимаю, даже намного круче!!! 

ну да а велосипед круче автомибиля, так как нет двигателя .. Я понимаю, конечно,  экономия, экология.. но педали терь крутить вручную вножную.. 
 smile

Добавлено через 7 минут и 10 секунд
напомнило один детский рассказ :
Цитата

... крупные капли били ослика по спине. 
"больно", — подумал ослик. и спрятался под зонтик.
капли стучали по зонтику, и ослик подумал: "теперь больно зонтику". и вместе с зонтиком он укрылся в домике. 
и услышал, как дождь падает на крышу. теперь было больно домику. и тогда ослик залез на крышу и закрыл домик. 
— зачем ты это делаешь, ослик? — спросил его медвежонок. — разве тебе не больно? 
а ослик ответил: 
— кому-то всегда бывает больно. но я сильней, чем зонтик, и сильней, чем домик. а больно должно быть тому, кто сильный.

вобщем выбирайте кому должно быть больно:  Вам, или компилятору с осью.. 
 smile 


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


pattern`щик
****


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

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



Цитата(mes @  3.11.2010,  21:55 Найти цитируемый пост)
напомнило один детский рассказ

мне это напомнило поговорку, которой я(будучи скептиком и циником) руководствуюсь:
Цитата

во дворе стоит сарай, на нем написано "х**". но там дрова!


это по поводу того, что кто-то что-то сказал, и где-то что-то написано.

PM WWW   Вверх
Alexeis
Дата 3.11.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(sofenru @  3.11.2010,  19:48 Найти цитируемый пост)
"что-то типа boost::function, но без использования динамической памяти" 

  Для чего там динамическая память? Это же шаблоны. Тут все известно на этапе компиляции. И число параметров и их тип. Такие вещи в С++ реализуются без кучи.


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

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

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


Новичок



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

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



Зачем все эти бесконечные споры? 

Я признаю, что я слабовато знаю С++. Просто у меня такая специфика работы, то плюсы, то ява, то пхп (и весь это набор хтмл, цсс, яваскрипт и т.д. и т.п...), то асутп (тут свой набор языков) и т.д... 

Это всё невозможно знать досканально!!! Что-то лучше, что-то хуже, но, конечно, далеко до профи. Хотя и этого, в принципе, хватает....

Теперь я решил сосредоточиться только на С++ (ну ещё посматриваю в сторону явы, но пока только С++). 

Я совсем слабовато знаю STL и совсем не знаю BOOST. Так что кидайте сюда ссылки по этим либам для чайникофф smile

На счёт своей библиотеки c3plus. Конечно же буду продолжать этот проектик! Думаю к новому году выйдет релиз!!!  smile 
PM MAIL   Вверх
mes
Дата 4.11.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Alexeis @  3.11.2010,  21:37 Найти цитируемый пост)
 Для чего там динамическая память? Это же шаблоны

к function можно подключить любой бинд в рантайме, а значит хранит содержимое по указателю, 
т.е.в дин. памяти..


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


Амеба
Group Icon


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

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



Цитата(mes @  4.11.2010,  12:04 Найти цитируемый пост)
к function можно подключить любой бинд в рантайме

  Хотя да, приемник то универсальный. С другой стороны это никак не влияет на скорость запуска обработчика (invoke), а ведь это и есть самый главный параметр. Вот кстати результаты тестов http://www.codeproject.com/KB/cpp/fastdelegate2.aspx . В большинстве случаев назначение обработчика не является действием критичным по времени.



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

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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



оффтопик, извиняйте - не удержался...
object.cpp:383
Цитата
void List::remove(int index) {
    if (memory == NULL) return;
    if (index < 0) return;
    if (count == 0) return;
    if (index > 1000000)
        int a = 1;

    else {
        delete memory[index];

        for (int i = index; i < count - 1; i++) {
        memory[i] = memory[i + 1];
        }
        count--;
    }
}


Это сообщение отредактировал(а) rudvil - 5.11.2010, 00:42
--------------------
xor
PM MAIL Skype   Вверх
boostcoder
Дата 5.11.2010, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(rudvil @  5.11.2010,  00:41 Найти цитируемый пост)
void List::remove(int index) {
    if (memory == NULL) return;
    if (index < 0) return;
    if (count == 0) return;
    if (index > 1000000)
        int a = 1;
    else {
        delete memory[index];

        for (int i = index; i < count - 1; i++) {
        memory[i] = memory[i + 1];
        }
        count--;
    }
}

вопрос то в чем?
код откуда?
PM WWW   Вверх
mes
Дата 5.11.2010, 00:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



 smile 
boostcoder, 1111е сообщениеsmile


Это сообщение отредактировал(а) mes - 5.11.2010, 00:47


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Цитата(boostcoder @ 5.11.2010,  00:45)
Цитата(rudvil @  5.11.2010,  00:41 Найти цитируемый пост)
void List::remove(int index) {
    if (memory == NULL) return;
    if (index < 0) return;
    if (count == 0) return;
    if (index > 1000000)
        int a = 1;
    else {
        delete memory[index];

        for (int i = index; i < count - 1; i++) {
        memory[i] = memory[i + 1];
        }
        count--;
    }
}

вопрос то в чем?
код откуда?

из этой библиотеки версии 0.3 =]
в файле object.cpp:383

магические цифры, магическая переменная "a"  smile 

Это сообщение отредактировал(а) rudvil - 5.11.2010, 00:51
--------------------
xor
PM MAIL Skype   Вверх
mes
Дата 5.11.2010, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(rudvil @  4.11.2010,  23:47 Найти цитируемый пост)
из этой библиотеки версии 0.3 =]

для тс : http://cplusplus.com/reference/stl/list/


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


pattern`щик
****


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

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



Цитата(mes @  5.11.2010,  00:47 Найти цитируемый пост)
1111е сообщение

уря! smile 

Цитата(rudvil @  5.11.2010,  00:47 Найти цитируемый пост)
из этой библиотеки версии 0.3

наверное ТС со мной не согласится(что скорее всего), ибо не понимает что пишешь просто кал smile даже отвечать на такое противно.

Добавлено @ 00:58
Цитата(mes @  5.11.2010,  00:57 Найти цитируемый пост)
для тс : http://cplusplus.com/reference/stl/list/ 

он напишет лучше.

Это сообщение отредактировал(а) boostcoder - 5.11.2010, 01:23
PM WWW   Вверх
Sahab
Дата 5.11.2010, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



зря вы так
без него скучнее))
PM MAIL   Вверх
Alexeis
Дата 5.11.2010, 10:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(rudvil @  5.11.2010,  01:47 Найти цитируемый пост)
магические цифры, магическая переменная "a"

  Ну прям вы придираетесь. Может это место для установки брейка. Я сам такое часто делаю. Может он тесты производительности делал на больших списках. Типа сколько времени займет поиск элемента. Пускай пишет. Зато больше узнает как это все устроено изнутри. На самом деле код системных библиотек С++ просто отвратительный для чтения/изучения. Безусловно авторы стремились добиться максимум производительности и экономии памяти, но такой код не годиться для изучения как пример того "как нужно правильно писать код".


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1146 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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