|
|
|
Канал Игры Мечты: «Злые беседы добрых программистов» |
|
|
Remint 385 EGP
Рейтинг канала: 3(31) Репутация: 84 Сообщения: 1785
Зарегистрирован: 12.05.2003 |
|
TpuCTaH : |
имееться ввиду я надеюсь не
|
Не stl eдиной жив программист , если говорить о stl скорее:
template <class Container>
class MyIterator : public std::iterator <std::bidirectional_iterator_tag, тип_элемента, тип_разности, ...>
{
protected:
Container& container;
public:
explicit MyIterator (Container& c) : container(c) {}
//дальше оператор присваивания и т.д.
...
}
//если есть очепятки извиняюсь, тут подсветки нет
Хотя в stl гибкости уже готовых решений выше крыши, если чего не хватает в реализации от MS, можно найти в stl port, или boost, благодоря чему ее чаще приходится просто применять, нежели расширять, чаще всего, если нужно было что-то свое, удавалось отделаться с помощью собственных функциональных адаптеров. Т.е. еще проще.
А вот в WTL/ATL написание собственных контролов с расширенной фунциональностью обычное дело, этим она как раз и удобна, когда нужен свой красивый интерфейс, при компактных размерах исходников.
Что-нибудь вроде:
class CMyTabPaneContainer : public CPaneContainerImpl<CMyTabPaneContainer >
{
...
}
TpuCTaH : |
Есть книги по boost и tr1 на руссоком?
|
Не видел, хотя не сильно и искал. И думаю по boost кроме обзорных статей вряд-ли чего будет, в отличии от stl не стандарт, все может на ходу обновляться вместе с описаниями на сайте. Иначе получиться в книге одно, на сайте boost другое, итого - сборник неточных и порой вредных советов. Потому уж лучше в оригинале, как ни крути инглиш нужно учить, и совершенствовать причем, постоянно иначе забывается зараза.
_________________ Да пребудет с вами сила...
Последний раз редактировалось: Remint (16:18 15-05-2007), всего редактировалось 1 раз |
|
|
Crimson 560 EGP
Рейтинг канала: 4(83) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
TpuCTaH : |
ммм наследовать stl? имееться ввиду я надеюсь не
class MySuperVector : public std::vector<int>
{
...
}
???
|
Это я надеюсь не вместо "typedef std::vector<int> MySuperVector;"?
|
|
|
TpuCTaH 63 EGP
Рейтинг канала: 1(4) Репутация: 8 Сообщения: 128 Откуда: Харьков Зарегистрирован: 12.06.2006 |
|
class RenderList : private std::list<RenderObject*>
{
public:
void Setup();
void Cleanup();
void OnLostDevice();
void OnResetDevice();
void Update(float dt);
void Draw();
void PushBack(RenderObject* ptr);
void SetDead(RenderObject * ptr);
};
Прочитал у Маерса на днях про чисто виртуальные деструкторы ... переписывать надо
Пшел читать гетинг стартед про бууст
_________________ Если вы считаете, что C++ труден, попытайтесь выучить английский.(с)Bjarne Stroustrup
С++&&DirectX
Последний раз редактировалось: TpuCTaH (08:42 15-05-2007), всего редактировалось 1 раз |
|
|
Crimson 560 EGP
Рейтинг канала: 4(83) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
Ыыыы... Чёп сказать такого умного...
Ну во-первых ты не столько наследуешь, сколько пишешь враппер. Я бы в такой ситуации просто сделал std::list<RenderObject*> закрытым атрибутом класса RenderList.
Во-вторых если уж ты наследуешь - зачем тебе второй PushBack()?
В третьих есть мнение, что вообще не стоит подобным образом скрещивать бульдога с носорогом. Лучше на мой взгляд Draw(RenderList), чем RenderList.Draw(). Или это синглтон?
|
|
|
TpuCTaH 63 EGP
Рейтинг канала: 1(4) Репутация: 8 Сообщения: 128 Откуда: Харьков Зарегистрирован: 12.06.2006 |
|
ну вопервых низя наследоваться от stl контейнеров потому что у них нет виртуального деструктора. (с)Майерс.
Не не синглтон.
Наследование приватное и push_back невидно. Затем и нужен.
_________________ Если вы считаете, что C++ труден, попытайтесь выучить английский.(с)Bjarne Stroustrup
С++&&DirectX
Последний раз редактировалось: TpuCTaH (14:32 15-05-2007), всего редактировалось 2 раз(а) |
|
|
Star'ik 325 EGP
Репутация: 71 Сообщения: 1882 Откуда: Msk Зарегистрирован: 29.04.2003 |
|
По поводу библиотек. Был такой вот пример...
Мужичок с Лукойла частенько ездил по западным странам - людей посмотреть, себя показать. Мужичок - классный программер. Как-то раз, посетив один вычислительный центр и посмотрев, как западные программеры-прикладники ковыряют какую-то процедуру переиндексации данных, наш герой решил помочь западным коллегам. Коллеги добились производительности, равной часовому отрезку времени. Т.е. проще говоря, что-то выполнялось в течении часа. Наш человек тоже, с разрешения присутствующих, написал некую процедуру. В итоге переиндексация произошла за 15 минут. При попытках разобраться в наваяном коде, западные программисты впали в ступор, резюмировав в итоге, что им сие творение пера непонятно, и использовать его они не будут, т.к. не поняли, что к чему...
ЗЫ: Вот такие вот есть программисты.
_________________ Все хорошее когда-нибудь кончается
Последний раз редактировалось: Star'ik (14:49 15-05-2007), всего редактировалось 1 раз |
|
|
TpuCTaH 63 EGP
Рейтинг канала: 1(4) Репутация: 8 Сообщения: 128 Откуда: Харьков Зарегистрирован: 12.06.2006 |
|
Ага. Тока кто потом после него программу поддерживать будет?
_________________ Если вы считаете, что C++ труден, попытайтесь выучить английский.(с)Bjarne Stroustrup
С++&&DirectX |
|
|
Star'ik 325 EGP
Репутация: 71 Сообщения: 1882 Откуда: Msk Зарегистрирован: 29.04.2003 |
|
То-то и оно. Как говориться, потому Макйрософт и у руля, т.к. остальные нифига не рубят... Иначе давно бы линукс был везде...
_________________ Все хорошее когда-нибудь кончается |
|
|
Remint 385 EGP
Рейтинг канала: 3(31) Репутация: 84 Сообщения: 1785
Зарегистрирован: 12.05.2003 |
|
Star'ik : |
Наш человек тоже, с разрешения присутствующих, написал некую процедуру. В итоге переиндексация произошла за 15 минут.
|
Причем, судя по времени, вполне возмоно, что с помощью вызовов тех же самых библиотечных процедур, либо с использованием готового и распостраненного API, или технологии для работы с БД, но только с прямыми руками, благодоря хорошему знанию билиотеки/API/технологии/языка. Если последнего пункта не наблюдалось, проблем от такой оптимизации может быть больше чем выигрыша.
Гы мелкософт со своими либами, это тема отдельная, у них есть и очень удачные и грамотно спроектированые вещи. Есть и не очень. Библиотеки в целом тут причем?
STL, или boost в тормознутости едва ли можно обвинить, если знать, что и где лучше применять. Там эффективность в плане быстродействия была поставлена во краю угла.
Самый примитивный пример, тот же std::string, при работе над строкой, будет работать гораздо быстрее чем TCHAR tc[xxx] + разные олд стаил _tcscat e.t.c., хотя бы потому, что в последнем случае, при каждой такой операции будет заново расчитываться длина строки с перебором всех символов, в первом нет (и это самая примитивная оптимизация). Более того даже достаточно грамотно спроектированый мелкософтовский класс CString, проигрывает std::string, так как там есть много других интересных моментов над которыми думали очень гармотные программисты. Аналогично и во многих других местах.
_________________ Да пребудет с вами сила... |
|
|
Minx 979 EGP
Рейтинг канала: 6(328) Репутация: 135 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
Star'ik : |
ЗЫ: Вот такие вот есть программисты.
|
Епстественно. Непонятный код содержит потенциально больше ошибок и менее сопровождаем.
Да и какие-то глупые программисты. Если есть решение, улучшающее скорость в 4 раза, при чем скорость критична, то лучше в этом решении разобраться и его принять к сведению. И потом способ пригодится, и проект работать будет.
Тем более что там разбираться... в коде который думаю от силы за пару часов писался.
И чем то это мне напомнило диалог:
Alexey Gaev : |
OL> Умница! Блеснyл интеллектом. Я pада!
Каким нафиг интеллектом. Я дурак, сертификатов у меня нет и академиев я не кончал. Hо набрать "select firstname, lastname from people as p, biographies as b where p.ID=b.ID and b.TR like '%is a vegetarian%' and p.Sex='M'" могу.
|
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (20:26 15-05-2007), всего редактировалось 1 раз |
|
|
Crimson 560 EGP
Рейтинг канала: 4(83) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
TpuCTaH : |
ну вопервых низя наследоваться от stl контейнеров потому что у них нет виртуального деструктора. (с)Майерс.
|
Наследоваться-то можно, если осторожно. Помня при этом, что у stl контейнеров нет виртуальных деструкторов Вопрос только зачем от них наследоваться...
TpuCTaH : |
Наследование приватное и push_back невидно. Затем и нужен.
|
А, так оно у тебя еще и приватное... Дык тогда я тем более не вижу смысла наследоваться
|
|
|
TpuCTaH 63 EGP
Рейтинг канала: 1(4) Репутация: 8 Сообщения: 128 Откуда: Харьков Зарегистрирован: 12.06.2006 |
|
Так вот и теперь не вижу. Просто подумал что
for(vector<int>::iterator i = vec.begin(),e = vec.end();i != e; i++ ){}
будет работать медленнее чем
for(iterator i = begin(),e = end();i != e; i++ ){}
да и когда писал не понимал прелести тайпдефа. Переписывать буду. Затем и пишу чтоп научиться. Сразу же никто правильно не пишет. Я надеюсь с этим никто спорить не будет?
_________________ Если вы считаете, что C++ труден, попытайтесь выучить английский.(с)Bjarne Stroustrup
С++&&DirectX
Последний раз редактировалось: TpuCTaH (12:32 16-05-2007), всего редактировалось 1 раз |
|
|
Crimson 560 EGP
Рейтинг канала: 4(83) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
Думаю что не будет. Сам смысл многих фишек уловил уже когда сплясал на граблях... И то не уверен что до конца
|
|
|
TpuCTaH 63 EGP
Рейтинг канала: 1(4) Репутация: 8 Сообщения: 128 Откуда: Харьков Зарегистрирован: 12.06.2006 |
|
ну в принципе если клас не полиморфный то можно от stl контейнеров наследоваться. и думать туту нефиг надо взять и померять.
_________________ Если вы считаете, что C++ труден, попытайтесь выучить английский.(с)Bjarne Stroustrup
С++&&DirectX |
|
|
Minx 979 EGP
Рейтинг канала: 6(328) Репутация: 135 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
TpuCTaH : |
Так вот и теперь не вижу. Просто подумал что
for(vector<int>::iterator i = vec.begin(),e = vec.end();i != e; i++ ){}
будет работать медленнее чем
for(iterator i = begin(),e = end();i != e; i++ ){}
|
А
Код: |
for(vector<int>::iterator i = vec.begin(),e = vec.end();i != e; ++i ){}
|
будет ещё быстрее.
Только возникает вопрос в количестве писанины и в том, что end() может в некоторых случаях изменится, что придется лишний раз контролировать.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
бугак
апологетам ООП посвящается
http://blog.gamedeff.com/?p=91
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4039 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
апологетам ООП посвящается
|
А для "тупых Дельфийцев" не переведете?
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Нам их непонять Но сайтец интересный, с полезностями.
_________________ У меня бисера не доxеpа. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
вкратце, сипипя поддерживает три парадигмы программирования:
- функциональную
- объектно-ориентированную
- обобщённую
кажная ступень осваивается очень тяжко, особенно если знаешь одну из них, потому как груз прежних знаний давит сильно
мну сам застрял на перепутье между ООП и ОП, собсно трёп на ирке об ентом, о трудностях перехода
Warstone, к сожалению насчёт дельфинов ничего не могу сказать...
знаю тока, что обобщённое программирование существует на других языках, в плюсы пришло не сразу, а придя, приняло форму почти что изуверско-садисткую, т.к. реализуется посредством специализаций шаблонов
_________________ This is what you get ...
(c) Radiohead |
|
|
Remint 385 EGP
Рейтинг канала: 3(31) Репутация: 84 Сообщения: 1785
Зарегистрирован: 12.05.2003 |
|
На своем опыте - осваивается тяжко до тех времен пока не повезет столкнуться с задачей на которую та или иная парадигма хорошо ложиться, вот тогда сразу начинаешь ощущать все прелести и понимать нафига Александеску и пр. так жестко отжыгают и заморачиваюца. Просто во многих книгах примеры вынужденно дебильные для краткости и зачем оно надо в полной мере на этих примерах не ощущается.
Для многих задач, старые проверенные подходы могут быть реально проще и эффективней, соответственно в них не обязательно такие огороды городить, наверно отсюда и все религиозные войны ортодоксальных приверженцев той или иной парадигмы.)
_________________ Да пребудет с вами сила... |
|
|
|
|
|
Канал Игры Мечты: «Злые беседы добрых программистов» |
|