InvokeInterface

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
template <class _Callable, class..._Args>
auto InvokeInterface(_Callable&& fn, _Args&&...args) -> return_code_t;

Вызывает интерфейсный метод, возвращающий код return_code_t, с указанным набором аргументов и, если интерфейсный метод возвращает код ошибочного завершения, генерирует исключение Chusov::Exceptions::ChsvCodeException.

Параметры шаблона
_CallableТип Callable-объекта, который вызывается функцией. Прототип объекта должен позволять однозначно выполнить вызов объекта с аргументами std::forward<_Args>(args)....
_Args...Тип входных аргументов, над которыми вызывается Callable-объект fn.
Параметры
fnФункциональный объект типа _Callable, который вызывается над аргументами args....
...argsНабор входных аргументов, над которыми вызывается Callable-объект fn.
Возвращаемое значение:
Код return_code_t, возвращенный функтором fn.
Возможные исключения
Chusov::Exceptions::ChsvCodeExceptionИсключение, соответствующее коду ошибочного завершения, если последний возвращается объектом fn.
См. также
InvokeInterfaceGetterВызывает указанный Callable объект, возвращающий return_code_t, и, если объект возвращает код успешного завершения, возвращает указанный индексом выходной параметр через return - иначе генерирует исключение типа Chusov::Exceptions::ChsvCodeException.
InvokeInterfaceSetterВызывает интерфейсный метод, возвращающий код return_code_t, с указанным набором аргументов и, если интерфейсный метод возвращает код ошибочного завершения, генерирует исключение Chusov::Exceptions::ChsvCodeException.
InvokeDomainInterfaceВызывает интерфейсный метод, возвращающий код domain_response_code_t, с указанным набором аргументов и, если интерфейсный метод возвращает код ошибочного завершения, генерирует исключение drc_exception.


Пример
std::uint32_t cbAddress = 0;
InvokeInterface(&ITCPNode::GetAddress, *pTcpNode, nullptr, &cbAddress);
auto pAddress = std::unique_ptr<char[]>(new char [cbAddress]);
InvokeInterface(&ITCPNode::GetAddress, *pTcpNode, pAddress.get(), &cbAddress);