StreamOwn::StreamOwn: различия между версиями
Перейти к навигации
Перейти к поиску
Параметры шаблона
Параметры
м |
|||
Строка 22: | Строка 22: | ||
{{function_paramlist add|pStream|Указатель на адаптируемую реализацию потока [[IStream]].|paramdir=[in]}} | {{function_paramlist add|pStream|Указатель на адаптируемую реализацию потока [[IStream]].|paramdir=[in]}} | ||
{{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[StreamOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}} | {{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[StreamOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}} | ||
{{function_paramlist add|refRight|[[Ссылочный адаптер]], реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы | {{function_paramlist add|refRight|[[Ссылочный адаптер]], реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <source lang="cpp" inline>refRight.get_interface()->Clone()</source>.}} | ||
{{function_paramlist add|ownRight|[[Владеющий адаптер]], реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы | {{function_paramlist add|ownRight|[[Владеющий адаптер]], реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с параметром <source lang="cpp" inline>ownRight.get_interface()->Clone()</source>. Перемещение выполняется перегрузкой 6, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <source lang="cpp" inline>ownRight.release_ownership()</source>.}} | ||
{{function_paramlist end}} | {{function_paramlist end}} | ||
{{function_end}} | {{function_end}} |
Версия 20:03, 8 августа 2019
StreamOwn(); //1
explicit StreamOwn(IStream* pStream) noexcept; //2
StreamOwn(StreamOwn&& right) noexcept; //3
template <class AnotherAdapterRef>
explicit StreamOwn(const AnotherAdapterRef& refRight) noexcept; //4
template <class AnotherAdapterOwn>
StreamOwn(const AnotherAdapterOwn& ownRight) noexcept; //5
template <class AnotherAdapterOwn>
StreamOwn(AnotherAdapterOwn&& ownRight) noexcept; //6
Конструкторы адаптера с владением.
- Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
- Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации потока.
- Конструктор, выполняющий инициализацию адаптера с перемещением адаптируемой реализации интерфейса. Адаптер right в результате операции теряет владение реализацией потока, как если бы был выполнен вызов
right.release_ownership()
с присваиванием возвращенного адреса создаваемому адаптеру. - Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из ссылочного адаптера refRight путем вызова
refRight.get_interface()->Clone()
с неявным приведением результата к типуIStream*
. Данный конструктор участвует в разрешении перегрузки, только если подтипAnotherAdapterRef::interface_type
существует и поддерживает методAnotherAdapterRef::interface_type::Clone()
, указательAnotherAdapterRef::interface_type*
приводим неявно к типуIStream*
, а сам тип AnotherAdapterRef является ссылочным адаптером. - Конструктор, создающий экземпляр адаптера на основе заданного параметром адаптера с владением путем клонирования интерфейса (то есть вызова метода
ownRight.get_interface()->Clone()
). Данный конструктор участвует в разрешении перегрузки, только если подтипAnotherAdapterOwn::interface_type
существует и поддерживает методAnotherAdapterOwn::interface_type::Clone()
, указательAnotherAdapterOwn::interface_type*
приводим неявно к типуIStream*
, а сам тип AnotherAdapterOwn является адаптером с владением. - Конструктор, создающий экземпляр адаптера путем переноса адреса реализации интерфейса
AnotherAdapterOwn::interface_type
с приведением его к типуIStream*
. В результате вызова адаптер ownRight теряет владение своим экземпляром реализации интерфейсаAnotherAdapterOwn::interface_type
и инициализируется нулевым адресом, как если бы был выполнен вызовownRight.release_ownership()
.
AnotherAdapterRef | Тип ссылочного адаптера, участвующего в качестве параметра refRight в конструкторе 4. Значение std::is_convertible_v<typename AnotherAdapterRef::interface_type*, IStream*> должно быть true, адаптер - ссылочным, а интерфейс AnotherAdapterRef::interface_type должен поддерживать вызов pI->Clone() , где pI - указатель типа AnotherAdapterRef::interface_type* . |
AnotherAdapterOwn | Тип адаптера с владением, участвующего в качестве параметра ownRight в конструкторах 5 и 6. Значение std::is_convertible_v<typename AnotherAdapterOwn::interface_type*, IStream*> должно быть true, адаптер - владеющим. Для копирования перегрузкой 5 интерфейс AnotherAdapterOwn::interface_type также должен поддерживать вызов pI->Clone() , где pI - указатель типа AnotherAdapterOwn::interface_type* . |
[in] | pStream | Указатель на адаптируемую реализацию потока IStream. |
right | Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру StreamOwn, как если бы был выполнен вызов right.release_ownership() . | |
refRight | Ссылочный адаптер, реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом refRight.get_interface()->Clone() . | |
ownRight | Владеющий адаптер, реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с параметром ownRight.get_interface()->Clone() . Перемещение выполняется перегрузкой 6, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом ownRight.release_ownership() . |