
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 17 18 [19] 20 21 ... 116 117 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#271
,
|
|
Цитата Nich @ Profi, а не помнишь, в голосованиях тема была похожая, мы там тоже спорили чуть ли не до драки? ![]() Угу, помню. ![]() Цитата Nich @ ![]() ![]() template<class _InIt, class _Ty> inline _InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val) { // find first matching _Val for (; _First != _Last; ++_First) if (*_First == _Val) break; return (_First); } Шаблон типа, говоришь! |
Сообщ.
#272
,
|
|
|
Nich, да никак. Плодятся TIntList, TStringList и т. д.
![]() |
![]() |
Сообщ.
#273
,
|
|
Nich? можно для незнающих С, построчно разжевать?
![]() |
![]() |
Сообщ.
#274
,
|
|
Цитата Shaggy @ Nich? можно для незнающих С, построчно разжевать? ![]() Ну, у меня вопросы вызвала только первая строка. Я знаю, что template - это шаблон типа. Переписать функцию _Find, ясное дело, не проблема, но вот как template обыграть, пока не знаю, но то, что решение есть - точно. Хоты бы вот. Добавлено Ах, да! _Find: ![]() ![]() Function _Find(_First,Last:_InIt; const _Val:^_Ty):_InIt; inline; Begin Repeat Inc(_First); if @_First=_Val then Break; Until _First=_Last; Result:=_First; end; Вроде так! Добавлено И вот! Сделать можно? Можно! На С++ проще? Проще! Пока мой прогноз работает! |
Сообщ.
#275
,
|
|
|
Цитата Shaggy @ Nich? можно для незнающих С, построчно разжевать? ![]() Это простой шаблон функции, выполняющей поиск заданного значения в интервале, заданном двумя итераторами. В общем, эту функцию можно использовать для поиска значений произвольных типов (для которых определена операция ==) в различных контейнерах. |
Сообщ.
#276
,
|
|
|
Какие жизненные строчки тут есть: ![]() Цитата Конечно, я уже слышал о Delphi, но относился к ней как к забавной зверушке. Поскольку работать с инструментами от Microsoft мне было невмоготу, то я решил попробовать Delphi. Надо сказать, что процесс освоения нового языка и новой среды оказался чрезвычайно легким и гладким, так что я изредка говорил про себя - аx, Borland, Borland! Уже после короткого времени работы с новой средой я был настолько очарован легкостью и элегантностью разработки визуальной части программ, что не заметил, как … попал в ловушку. Сидя на дне этой ловушки, я начал размышлять, что произошло. А произошло вот что - я практически перестал заниматься архитектурной частью проектов. Легкость, с которой в Delphi можно собрать прототип проекта и превратить его в работающий проект, сыграла со мной злую шутку. Работая на C++, я детально продумывал структуры данных, разделение программы на Документ и Вид, организацию удобной для сопровождения иерархии классов, алгоритмы работы с данными. Большую часть средств для этого предоставляла библиотека STL (Standard Template Library), без учета ее алгоритмов и контейнеров я и не представлял разработку проекта. Относительная трудоемкость реализации визуальной части программы прямо таки заставляла больше времени уделять сути программы, как более интересной и творческой. Но все смешалось в доме Облонских, когда визуальную часть стало разрабатывать не просто интересно, а очень интересно, таская по форме разные красивые компоненты. Причем это перешло даже в патологию - мне уже не казалось дикостью использование TTreeView в качестве контейнера, когда в программе требовалась структура данных в виде дерева. .... |
Сообщ.
#277
,
|
|
|
Штирлиц, т. е. Nich сказал раз. Я говорю два:
![]() ![]() // Объявляем событие boost::signal<void ()> s_TestSignal; void Handler1() { std::cout << "Handler 1 called" << std::endl; } void Handler2(const std::string& str) { std::cout << "Handler 2 called. Passed string: " << str << std::endl; } void Handler3(int a, int b) { std::cout << "Handler 3 called. Sum of arguments: " << a + b << std::endl; } int main() { // Цепляем к событию делегаты s_TestSignal.connect(boost::bind(Handler1)); s_TestSignal.connect(boost::bind(Handler2, "Test string 1")); s_TestSignal.connect(boost::bind(Handler2, "Test string 2")); s_TestSignal.connect(boost::bind(Handler3, 10, 20)); s_TestSignal.connect(boost::bind(Handler3, 20, 30)); // Дергаем событие. s_TestSignal(); } Получаем вполне ожидаемые: ![]() ![]() Handler 1 called Handler 2 called. Passed string: Test string 1 Handler 2 called. Passed string: Test string 2 Handler 3 called. Sum of arguments: 30 Handler 3 called. Sum of arguments: 50 Как такое же получить на дельфи? |
Сообщ.
#278
,
|
|
|
Цитата Profi @ Есть предложение! Один человек пишет код, скажем на C++, выкладывает его здесь, и его переводят в Delphi. Потом наоборот. Писать можно (и даже нужно!) использую особую специфику языка, чтобы было сложнее переводить. Мой прогноз: Любую реализацию на одном языке переведут в другой. Программа, написанная на этом языке с использованием его особых специфик для ускорения, будет с 99% вероятностью работать быстрее, чем её перевод. Проверим? Ну для примера: ![]() ![]() #include <complex> typedef std :: complex<signed long int> complex; complex f (const complex * a, const complex * b, int size) { complex r (0); for (;size--;) r += *a++ * std :: conj (* b++); return r; } Гоу! |
Сообщ.
#279
,
|
|
|
antigen - а что оно делает? а то зохавать можно в дельфу через ICC6, однак незачёт коду- почемуто в три регистра не уложилось (в формате борланд _fastcall). Кстати что он делает (код этот)?
![]() ![]() ; parameter 1: eax ; parameter 2: edx ; parameter 3: ecx ; parameter 4: 44 + esp PUBLIC ?f@@YI?AV?$complex@J@std@@PBV12@0H@Z ?f@@YI?AV?$complex@J@std@@PBV12@0H@Z PROC NEAR .B1.1: ; Preds .B1.0 push edi push esi push ebp push ebx sub esp, 24 mov ebp, DWORD PTR [esp+44] xor ebx, ebx xor edi, edi xor esi, esi mov DWORD PTR [eax], edi test ebp, ebp mov DWORD PTR [eax+4], edi lea edi, DWORD PTR [ebp-1] je .B1.5 ; Prob 2% ; LOE eax edx ecx ebx esi edi ; cut... Работа Intel'а понравилось абсолютной автономностью, а м$явочный сделал ряд левых вызовов, во внешние костыли... |
Сообщ.
#280
,
|
|
|
Цитата Profi @ А _InIt что такое? И ты уверен, что написал то же самое? В C/C++ унарный оператор * выполняет разыменование(в паскале это _First^ ), а у тебя паскалевский оператор @ - получение адреса переменной(обратное действие). И сравниваешь ты соответственно не значения, а адреса. Вроде так! Добавлено P.S. n0p в очередной раз зажигает. ![]() ![]() ![]() |
Сообщ.
#281
,
|
|
|
хм.. вот один раз я так какойто мп3 распаковщик заюзал. С++ код через ML7 провернул, в OMF формате. И в тегах {$L mp3dec.obj} и заимел. в модуль. Работало даже. А так - заманаешся переводить. Даже по чуть чуть. Монстры ведь делали.. иех..
|
Сообщ.
#282
,
|
|
|
Цитата Profi @ Ну дык понятно, что единственный способ сделать в ObjectPascal что-то подобное шаблонам C++ - использовать классы или условную компиляцию. Об этом ранее уже здесь вроде говорили. А как быть с простыми типами? А засунуть в одно выражение? И не надо забывать, что шаблон может быть развернут компилятором в простое выражение еще на этапе компиляции. Яркий пример - вычисление факториала в одной из тем. Или вот: Скорость кода (сообщение #853618) попытка вычисления функции аккермана во время компиляции. И вот! |
Сообщ.
#283
,
|
|
|
Ну ясен пень что в компилятор Delphi среднего класса оптимизации, столько труда и бабок не вложено, сколько в профессиональные, учитывающие все x86/x86_64/ARM_XSCale архитектурные нюансы, компиляторы Inel®, и.. весьма тормозные..
![]() Добавлено Хотя конечно - если мне надо будет рассчетов, например атомов каких нибудь или молекул, химических соединений... посчитать на х86 недокалькуляторе.. а то и сэмулировать в 3D да еще в реальном времени. Посмотреть там, на цепную реакцию какого нибудь цезия137 (критическую массу).. как это сделали америкашки на секретном ламповом суперкомпьютере Эниак.. и затестили в реале в 45-ом. то да.. засяду за плюсы.. авось к 2045-ому, прога будет готова. |
Сообщ.
#284
,
|
|
|
Цитата Nich @ Profi, а не помнишь, в голосованиях тема была похожая, мы там тоже спорили чуть ли не до драки? ![]() VB и си сравнивали ![]() Добавлено Цитата Hryak @ Какие жизненные строчки тут есть А целиком можно? ![]() |
Сообщ.
#285
,
|
|
|
Цитата antigen @ Гоу! Ну а что тут принципиально нового? Просто функция посложнее, и на Делфи это будет ещё больше кода. |