-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


goto vs break & continue

Вторник, 14 Июля 2020 г. 14:35 + в цитатник
Qraizer:
Цитата applegame @
Спасибо, что лишний раз подтвердил убогость и уродство плюсов.
Не за что. Я там так и говорил, что scope – это C-подобное убожество, и лучше уж
    class Guard
    {
    std::function fn; // функция очистки
    public:
    template explicit Guard(T&& closure): fn(std::move(closure)) {}
    ~Guard() { fn(); }
    };

с последующими там
    HANDLE sameApp = CreateMutex(NULL, TRUE, uniqName.c_str());
    if (sameApp == NULL)
    return static_cast(logMsg("CreateMutex() failed", GetLastError()));
    Guard sameAppGuarded([=]() { CloseHandle(sameApp); });
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    if (WaitForSingleObject(sameApp, INFINITE) != WAIT_OBJECT_0)
    return static_cast(logMsg("Recursive run detected for " + name.filename().string(), GetLastError()));
    Guard sameAppLocked([=]() { ReleaseMutex(sameApp); });
    {
    SECURITY_ATTRIBUTES attr = { sizeof(attr), NULL, TRUE };
    HANDLE hIn = CreateFile((newName.parent_path() / "stdin.txt").string().c_str(),
    FILE_GENERIC_READ, FILE_SHARE_DELETE,&attr, CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL, NULL);
    Guard hInGuarded ([=]() { CloseHandle(hIn); });
    /* ... */
    }
что тоже костыль, но уже гораздо меньший, ибо является GNUсным аналогом его идиомы. К тому же без досадных недостатков последнего, что даже в C вызывали сложности.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834237

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку