Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Реализация событий в С++


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

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

чего???

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

http://www.boost.org/doc/libs/1_40_0/doc/html/signals.html

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

Может сперва стоит как следует изучить возможности языка, а потом писать блог? Пиши для себя сколько угодно, ради бога, только не надо это публиковать и других с толку сбивать. В C++ ЕСТЬ! указатели на функции-члены, поищи в http://www.google.com/search?hl=en&client=firefox-a&hs=Qg&rls=org.mozilla%3Aen-US%3Aofficial&q=C%2B%2B+pointer+to+member+functions&aq=f&aqi=&aql=&oq=&gs_rfai=.

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

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

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

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


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

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

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

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

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

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

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

Автор: sofenru 2.11.2010, 14:38
Цитата

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

чего???


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

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

Цитата

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


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

Цитата

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


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

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

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

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

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

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

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

Автор: Master01 2.11.2010, 14:45

ну вес либы не принципиален smile а вот надёжность, безопасность, масштабируемость и пр. очень даже smile

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

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

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

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

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

Автор: sofenru 2.11.2010, 15:26
Цитата

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


Цитата

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

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


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

Цитата

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


 smile  smile  smile 

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

Автор: azesmcar 2.11.2010, 15:29
Цитата(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); 


Автор: sofenru 2.11.2010, 16:21
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;
}



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

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

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

Автор: sofenru 2.11.2010, 16:51
Цитата

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


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

Цитата

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


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

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

... и т.д  smile 

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

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

#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 

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

точно сказано smile 
все будут плакать от того "как" она написана smile 

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

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

Автор: sofenru 2.11.2010, 17:03
mes, 
Выдаёт ошибку "function : is not a member of std" вот в этой строчке:
   std::function<void(btn*)> on_click;

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

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

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

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

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

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

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

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

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

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

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

Цитата

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


вроде читал когда-то, что хотели включить...

Автор: mes 2.11.2010, 17:22
sofenru, вот велосипедно, для сравнения, в том стиле, что просили :
http://liveworkspace.org/code/d9f8501d03202363ce817d2869b7dece
П.С. грязь из за спешки 

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

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

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

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

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

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

какой-то двойственный смысл...

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

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

понял.
в предыдущем посте, запятая сбивала с толку.

Автор: azesmcar 2.11.2010, 19:19
Цитата(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 

Автор: sofenru 3.11.2010, 18:48
Цитата(mes)

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


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

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

Цитата(Winnie)

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

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


Цитата(mes)

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


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

Автор: boostcoder 3.11.2010, 19:00
Цитата(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 выделяет динамическую память.

спасибо.

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

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

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

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

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

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

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

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


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

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

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

Автор: sofenru 4.11.2010, 10:57
Зачем все эти бесконечные споры? 

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

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

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

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

На счёт своей библиотеки c3plus. Конечно же буду продолжать этот проектик! Думаю к новому году выйдет релиз!!!  smile 

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

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

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

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

Автор: rudvil 5.11.2010, 00:41
оффтопик, извиняйте - не удержался...
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--;
    }
}

Автор: 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--;
    }
}

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

Автор: mes 5.11.2010, 00:47
 smile 
boostcoder, 1111е сообщениеsmile

Автор: rudvil 5.11.2010, 00:47
Цитата(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 

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

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

Автор: boostcoder 5.11.2010, 00:57
Цитата(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/ 

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

Автор: Sahab 5.11.2010, 01:28
зря вы так
без него скучнее))

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)