cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Новый "Специальный метод класса" #382

Open Neargye opened 3 years ago

Neargye commented 3 years ago

Перенос предложения: голоса +0, -8 Автор идеи: James

Предлагаю рассмотреть специальный метод класса например @имя_класса.

В этом методе нужно писать try {/**/}catch(...){}, и если в классе он объявлен и определен все функции у которых нет спецификатор времени компиляции noexcept, обернуть этим блоком try,catch. Т.е. задать некий шаблон, и по нему обернуть все.

По семантике будет похож на деструктор: т.е. его как можно объявлять явно так и не объявлять вовсе.

Neargye commented 3 years ago

yndx-antoshkka 1 апреля 2019, 13:02 В таком виде функционал получается достаточно узкоприменимым. Более общее решение - метаклассы, через которые можно добиться аналогичного:

// Псевдокод
$class $try_catch {
    for(auto& m: this->functions()) {
        if (!m.is_noexcept()) {
            // add try{  } catch()
        }
    }
}