InterfaceExceptionGuardedCall

Материал из CAMaaS preliminary wiki
Версия от 21:09, 24 декабря 2017; Андрей Чусов (обсуждение | вклад) (Новая страница: «{{function_begin |template <class _Callable, class ... _Args> auto InterfaceExceptionGuardedCall(_Callable&& callable, _Args&& ... args) noexcept -> return_code_t…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску
template <class _Callable, class ... _Args>
auto InterfaceExceptionGuardedCall(_Callable&& callable, _Args&& ... args) noexcept -> return_code_t; //2

Осуществляет вызов указанного параметром Callable-объекта с заданным списком аргументов с защитой от исключений std::exception и Chusov::Exceptions::ChsvCodeException, возвращая соответствующий им код типа return_code_t.

Параметры шаблона
_CallableТип Callable-объекта, который вызывается функцией. Прототип объекта должен позволять однозначно выполнить вызов объекта с аргументами std::forward<_Args>(args)....
_Args...Тип входных аргументов, над которыми вызывается Callable-объект fn.
Параметры
fnФункциональный объект типа _Callable, который вызывается над аргументами args....
...argsНабор входных аргументов, над которыми вызывается Callable-объект fn. Если объект fn является нестатическим методом класса, то первым аргуметом должен являтся экземпляр этого класса, над которым вызывается метод.
Возвращаемое значение:
Код return_code_t, возвращенный функтором fn.
См. также
InvokeInterfaceGetterВызывает указанный Callable объект, возвращающий return_code_t, и, если объект возвращает код успешного завершения, возвращает указанный индексом выходной параметр через return - иначе генерирует исключение типа Chusov::Exceptions::ChsvCodeException.
InvokeDomainInterfaceGetterВызывает указанный Callable объект, возвращающий domain_response_code_t, и, если объект возвращает код успешного завершения, возвращает указанный индексом выходной параметр через return - иначе генерирует исключение типа drc_exception.
Пример
_Success_(_ChsvSucceeded(return)) return_code_t PLATFORM_NATIVE_CALLING_CONVENTION ShiftCurPos(std::int64_t cbShift) noexcept
{
    auto nResult = InterfaceExceptionGuardedCall([=]() -> return_code_t
    {
        auto cbNewOff = this->position() + cbShift;
        if ((cbShift < 0 && file_t::file_offset_type(-cbShift) > this->position()) ||  cbNewOff > this->file().size() || cbNewOff < this->position())
            throw Chusov::Exceptions::InvalidParameterException();
        this->position() = cbNewOff;
        return CHSVERROR_SUCCESS;
    });
    return nResult;
}