Войти
ФлеймФорумПрограммирование

Выполнение действия перед выходом из функции (без всяких goto) (3 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#30
11:54, 9 мая 2019

™­•-=MASTER=-•™
> как перестанешь хелоу-ворлдны ковырять, подумаешь ещё раз над своим высказыванием
Вы не с того конца заходите. Невозможность запрограммировать решение задачи - это не ущербность/незнание конкретного языка. Это - неумение программировать решения и/или негодность решения.


#31
12:03, 9 мая 2019

gudleifr
> Невозможность запрограммировать решение задачи - это не ущербность/незнание
> конкретного языка. Это - неумение программировать решения и/или негодность
> решения
captain obviousness :)

#32
12:11, 9 мая 2019

™­•-=MASTER=-•™
> captain obviousness
Дык!

#33
(Правка: 13:16) 13:14, 9 мая 2019

™­•-=MASTER=-•™
> а если в функции алгоритма много таких мест с вложенными циклами, будешь каждое
> оборачивать в функцию
я тебе больше скажу. существует мнение(не моё), что любая функция длиннее 5 строчек кода — это архитектурный ляп.

#34
13:49, 9 мая 2019

Suslik
> существует мнение(не моё), что любая функция длиннее 5 строчек кода — это
> архитектурный ляп.
Автор этого мнения что вообще писал по жизни?

#35
(Правка: 14:10) 14:06, 9 мая 2019

™­•-=MASTER=-•™
> в смысле шарповское try/finally?

У этой штуки семантика именно что try/finally, но синтаксис, имхо, выгоднее тем, что finally находится прямо там же где и защищаемый ресурс инициализируется.
Но можно использовать и более обобщённо, потому что это суть то что ты описываешь.

> здесь не очень понял...

std::function убрать можно чтобы класс оптимизировался по полной.
У меня как то так сейчас:

template< class T >
class Deleter
{
        const T &x;
public:
        Deleter( const T &functor ): x( functor ) {};
        ~Deleter() { x(); };
};

#define ALX_FINALLY_IMPL2(line, code) auto ftor##line = [&]() {code; }; Deleter<decltype(ftor##line)> deleter##line{ ftor##line };
#define ALX_FINALLY_IMPL(line, code) ALX_FINALLY_IMPL2(line,code)
#define ALX_FINALLY(code) ALX_FINALLY_IMPL(__LINE__, code)

Тут немного промежуточных движений в дебаге с хранением именно ссылки на ftor который и есть лямбда, чтобы тип Deleter-а выводился.
В C++17 это должно быть ненужным, но как я понял в mingw class template deduction еще не завезли.
В любом случае в релизе всё лишнее выкидывается и всё инлайнится как есть - никакой std::function не нужен становится, хранится только сама лямбда как есть.
Пишешь в результате так:

FINALLY( something );
или даже:
FINALLY(
  some1;
  some2;
  ...
);

#36
15:48, 9 мая 2019

1 frag / 2 deaths
> Автор этого мнения что вообще писал по жизни?
не знаю, кто изначально автор, но на это высказывание часто ссылается один мой знакомый лид, и со временем я с ним всё чаще соглашаюсь.

#37
(Правка: 16:14) 16:13, 9 мая 2019

оператор goto нужно переименовать в godno.

и это удовлетворит как славяноязычных пользоваталей! Ибо годно!

так и ненавистников оператора, знающих английский язык.

#38
16:44, 9 мая 2019

Suslik
> не знаю, кто изначально автор, но на это высказывание часто ссылается один мой
> знакомый лид, и со временем я с ним всё чаще соглашаюсь.
Есть программы идеальные, а есть выполняющие полезную работу.

#39
16:46, 9 мая 2019

1 frag / 2 deaths
> Есть программы идеальные, а есть выполняющие полезную работу.
Идеальной называется программа, выполняющая полезную работу.

#40
17:48, 9 мая 2019

1 frag / 2 deaths
> Есть программы идеальные, а есть выполняющие полезную работу.
если в программе есть функции из более чем 5 строчек, это не значит, что это — говнокод. это лишь значит, что программисту не удалось факторизовать программу, разбив её на оптимальные по размеру составляющие. это может либо обозначать, что реализованный алгоритм имеет настолько неудобную структуру, что представить его в удобном виде невозможно, либо что у программиста это сделать не получилось.

#41
18:06, 9 мая 2019

Suslik
> это лишь значит, что программисту не удалось факторизовать программу, разбив её
> на оптимальные по размеру составляющие
Я хочу сказать, что затраты на оптимальную факторизацию не оправдывают себя.

#42
18:20, 9 мая 2019

1 frag / 2 deaths
> затраты на оптимальную факторизацию не оправдывают себя.
Затраты на "оптимальную факторизацию" не могут не оправдать себя, т.к. других способов убедиться в правильности программы нет.

#43
19:01, 9 мая 2019

™­•-=MASTER=-•™
> в алгоритмах такое сплошь и рядом
  Сплошь и рядом такое только у говнокодеров, которые просто фигачат код даже не пытаясь его как-то оптимизировать.

#44
19:31, 9 мая 2019

Второй день на гд.ру обсуждали finally в С++....
Мнения разнились как всегда - на сотни взаимно перпендикулярных веток как в той шутке про семь красных перпендикулярных линий. :)

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумПрограммирование