Как заменить спецификации динамических исключений: throw (...) - PullRequest
0 голосов
/ 17 января 2019

Я работаю над проектом, который использует устаревшую библиотеку, которая использует определения функций, такие как

void func() throw(some_exception);

Поскольку спецификации динамических исключений удалены в C ++ 17, мне интересно, как решить эту проблему.

  1. P0003R0 предлагает заменить

    void func() throw(some_exception)
    {
        /* body */ 
    }
    

    с чем-то вроде

    void func()
    {
        try
        {
            /* body */
        }
        catch(const some_exception&) {
           throw;
        }
    }
    

    Однако у меня нет доступа к исходному коду (только файлы заголовков).

  2. Так что мне остается попытаться «исправить» определение функции в заголовке. Так, например Я мог бы написать

    void func() noexcept(false);
    

    Но когда функция выдает исключение, мое приложение по-прежнему завершается.

Как я могу изменить определение функции в заголовочных файлах или, возможно, настроить свой собственный проект (места, где я использую func), чтобы получить то же поведение, что и throw(some_exception) до C ++ 17?

1 Ответ

0 голосов
/ 17 января 2019

Просто удалите спецификацию динамического исключения. Это все, что вам нужно сделать.

C ++ не является Java; в C ++ предполагается, что все функции (на уровне языка) генерируют что-либо, если они не помечены как noexcept. Таким образом, если вы удалите спецификацию исключения, она будет работать точно так же, как и раньше.

...