noexcept перегрузга

Андрей Марцинкевич
Андрей Марцинкевич

Суть, что бы можно было писать разные варианты одной и той-же функции (одна выбрасывает исключение, другая нет)

Ибо сейчас приходиться либо мучаться с шаблонами, либо использовать разные имена.

Пример:

std::unique_ptr<CustomFile> openFile(const std::string& filename)
{
  if (!FileManager.isFileExist())
  {
    throw NoFileExistException();
  }
}

std::unique_ptr<CustomFile> openFile(const std::string& filename) noexcept
{
  if (!FileManager.isFileExist())
  {
    return nullptr;
  }
}


//вызов
 
auto file_with_except = openFile("SomeFile.txt"); //Exception
auto file_no_except   = (std::no_throw) openFile(); // file_no_except == nullptr

 

Вместо std::no_throw и noexcept может быть что-нибудь другое

-4
рейтинг
4 комментария
Andrey Davydov

Почему не так?

std::unique_ptr<CustomFile> openFile(const std::string& filename);
std::unique_ptr<CustomFile> openFile(const std::string& filename, std::nothrow_t);

auto file_with_except = openFile("SomeFile.txt");
auto file_no_except   = openFile("SomeFile.txt", std::nothrow);
Andrey Davydov
Андрей Марцинкевич

Andrey Davydov, потому что это выглядит как костыль, а не как часть языка. new же это умеет как-то обходить

Андрей Марцинкевич
Andrey Davydov

Андрей Марцинкевич, что значит "new это умеет как-то обходить"? У operator new есть именно что перегрузки с параметром std::nothrow_t.

Andrey Davydov
Андрей Марцинкевич

Andrey Davydov, действительно. Но все равно было бы наверно красивее сделать это элементом языка все же. 

Андрей Марцинкевич
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения