Represent as: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{DISPLAYTITLE:represent_as}} {{function_begin |template <class _To, class _From> auto represent_as(_From ref) -> →‎См. описание.: ;|{{represent_as brie…»)
 
Строка 4: Строка 4:
{{function template paramlist begin}}
{{function template paramlist begin}}
{{function template paramlist add|_To|Задает тип интерфейса, в который должно быть осуществлено преобразование либо тип [[Адаптер программного интерфейса|адаптера с владением]] над таким интерфейсом. Для интерфейса, в который осуществляется преобразование должна быть определена специализация шаблона [[interface_id]].}}
{{function template paramlist add|_To|Задает тип интерфейса, в который должно быть осуществлено преобразование либо тип [[Адаптер программного интерфейса|адаптера с владением]] над таким интерфейсом. Для интерфейса, в который осуществляется преобразование должна быть определена специализация шаблона [[interface_id]].}}
{{function template paramlist add|_From|Тип указателя на интерфейс, над которым осуществляется преобразование, либо тип {{cpp_language|value_categories|xvalue}}-ссылки на [[Адаптер программного интерфейса|ссылочный адаптер]] (без владения) над таким интерфейсом либо {{cpp_language|value_categories|glvalue}}-ссылка на смарт-указатель [[unique_interface_ptr]] на такой интерфейс. Интерфейс, из которого осуществляется преобразование, должен поддерживать метод <tt>RepresentAs</tt>, принимающий на вход идентификатор интерфейса, соответствующего <tt>_To</tt>, а также указатель типа <source lang="cpp" inline>void**</source>, и возвращаеть код [[return_code_t]], при успешности которого в выходной указатель должен записываться адрес реализации интерфейса, соответствующего <tt>_To</tt>, и <source lang="cpp" inline>nullptr</source> - при ошибочности. Тип <tt>_From</tt> вычисляется дедукцией параметра <tt>ref</tt>.}}
{{function template paramlist add|_From|Тип указателя на интерфейс, над которым осуществляется преобразование, либо тип {{cpp_language|value_category|xvalue}}-ссылки на [[Адаптер программного интерфейса|ссылочный адаптер]] (без владения) над таким интерфейсом либо {{cpp_language|value_category|glvalue}}-ссылка на смарт-указатель [[unique_interface_ptr]] на такой интерфейс. Интерфейс, из которого осуществляется преобразование, должен поддерживать метод <tt>RepresentAs</tt>, принимающий на вход идентификатор интерфейса, соответствующего <tt>_To</tt>, а также указатель типа <source lang="cpp" inline>void**</source>, и возвращаеть код [[return_code_t]], при успешности которого в выходной указатель должен записываться адрес реализации интерфейса, соответствующего <tt>_To</tt>, и <source lang="cpp" inline>nullptr</source> - при ошибочности. Тип <tt>_From</tt> вычисляется дедукцией параметра <tt>ref</tt>.}}
{{function template paramlist end}}
{{function template paramlist end}}
{{function paramlist begin}}
{{function paramlist begin}}

Версия 22:29, 2 января 2018

template <class _To, class _From>
auto represent_as(_From ref) -> /*См. описание.*/;

Осуществляет преобразование интерфейса, поддерживающего метод RepresentAs, в другой интерфейс и возвращает unique_interface_ptr-указатель на него или его адаптер с владением.

Параметры шаблона
_ToЗадает тип интерфейса, в который должно быть осуществлено преобразование либо тип адаптера с владением над таким интерфейсом. Для интерфейса, в который осуществляется преобразование должна быть определена специализация шаблона interface_id.
_FromТип указателя на интерфейс, над которым осуществляется преобразование, либо тип xvalue-ссылки на ссылочный адаптер (без владения) над таким интерфейсом либо glvalue-ссылка на смарт-указатель unique_interface_ptr на такой интерфейс. Интерфейс, из которого осуществляется преобразование, должен поддерживать метод RepresentAs, принимающий на вход идентификатор интерфейса, соответствующего _To, а также указатель типа void**, и возвращаеть код return_code_t, при успешности которого в выходной указатель должен записываться адрес реализации интерфейса, соответствующего _To, и nullptr - при ошибочности. Тип _From вычисляется дедукцией параметра ref.
Параметры
ref(Константный) указатель на интерфейс, для которого is_interface<std::remove_pointer_t<_From>>::value == true, и который поддерживает метод RepresentAs, как указано выше, либо (константная) ссылка на unique_interface_ptr над таким интерфейсом, либо универсальная ссылка на адаптер ссылочного типа.
Возвращаемое значение:
Если ref - указатель на программный интерфейс или ссылка на unique_interface_ptr над таким интерфейсом, то возвращается unique_interface_ptr над типом _To, в который осуществляется преобразование. Если ref - ссылка на адаптер программного интерфейса, то возвращается адаптер с владением, определенный над целевым интерфейсом.
Возможные исключения
Chusov::Exceptions::ChsvCodeExceptionИсключение, соответствующее коду ошибочного завершения, функции RepresentAs интерфейса _From.

Шаблон функции represent_as определен, только если требования, указанные для типов _To и _From удовлетворены.

Пример
ConsequentDataStorageInputOwn ibs = represent_as<InputByteStreamOwn>(represent_as<ConsequentDataStorageInputOwn>(storage).read());
unique_interface_ptr<IConsequentDataStorageInput> *ppDataStorage = represent_as<IConsequentDataStorageInput>(m_domain.get_domain_data(element_name_type(pDomainName, cbDomainName)));