StreamCOwn::operator=: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{function_begin|StreamCOwn& operator{{=}}(StreamCOwn&& right); //1 template <class RightAdapterType> StreamCOwn& operator{{=}}(RightAdapterType&& right); //2 |{{…»)
 
 
Строка 6: Строка 6:
# Аналогично, но с приведением типа указателя на реализацию с <source lang="cpp" inline>typename std::remove_reference_t<RightAdapterType>::interface_type*</source> к типу <source lang="cpp" inline>const IStream*</source>. Данная перегрузка участвует в процедуре разрешения перегрузок, только если <source lang="cpp" inline>RightAdapterType&&</source> является rvalue-ссылкой, тип <source lang="cpp" inline>std::decay_t<RightAdapterType></source> является [[владеющий адаптер|адаптером с владением]] с подтипом <tt>interface_type</tt>, указатель на который неявно приводим к <source lang="cpp" inline>const IStream*</source>.}}
# Аналогично, но с приведением типа указателя на реализацию с <source lang="cpp" inline>typename std::remove_reference_t<RightAdapterType>::interface_type*</source> к типу <source lang="cpp" inline>const IStream*</source>. Данная перегрузка участвует в процедуре разрешения перегрузок, только если <source lang="cpp" inline>RightAdapterType&&</source> является rvalue-ссылкой, тип <source lang="cpp" inline>std::decay_t<RightAdapterType></source> является [[владеющий адаптер|адаптером с владением]] с подтипом <tt>interface_type</tt>, указатель на который неявно приводим к <source lang="cpp" inline>const IStream*</source>.}}
{{function template paramlist begin}}
{{function template paramlist begin}}
{{function template paramlist add|RightAdapterType|Тип адаптера с владением реализацией интерфейса [[IStream]] (или неявно приводимого к нему интерфейса), которая передается экземпляру {{cpp_this}} адаптера перегрузкой 2. Тип <source lang="cpp" inline>std::decay_t<RightAdapterType></source> должен задавать адаптер с влядением через указатель, приводимый к типу <source lang="cpp" inline>const IStream*</source>.}}
{{function template paramlist add|RightAdapterType|Тип адаптера с владением реализацией интерфейса [[IStream]] (или неявно приводимого к нему интерфейса), которая передается экземпляру {{cpp_this}} адаптера перегрузкой 2. Тип <source lang="cpp" inline>std::decay_t<RightAdapterType></source> должен задавать адаптер с владением через указатель, приводимый к типу <source lang="cpp" inline>const IStream*</source>.}}
{{function template paramlist end}}
{{function template paramlist end}}
{{function_paramlist begin}}
{{function_paramlist begin}}

Текущая версия на 13:11, 9 августа 2019

StreamCOwn& operator=(StreamCOwn&& right); //1
template <class RightAdapterType>
StreamCOwn& operator=(RightAdapterType&& right); //2

Операторы присваивания адаптера с владением.

  1. Оператор присваивания с перемещением, который переносит владение реализацией потока адаптеру this. Присваивание адаптеру разрешено, только если он не был до этого проинициализирован действительным адресом реализации потока или был сброшен с помощью StreamCOwn::release_ownership или StreamCOwn::reset_ownership без параметров. В противном случае генерируются исключения - Chusov::Exceptions::UnsupportedCallException, если right не содержит реализации IStream, и Chusov::Exceptions::InvalidParameterException - в противном случае.
  2. Аналогично, но с приведением типа указателя на реализацию с typename std::remove_reference_t<RightAdapterType>::interface_type* к типу const IStream*. Данная перегрузка участвует в процедуре разрешения перегрузок, только если RightAdapterType&& является rvalue-ссылкой, тип std::decay_t<RightAdapterType> является адаптером с владением с подтипом interface_type, указатель на который неявно приводим к const IStream*.
Параметры шаблона
RightAdapterTypeТип адаптера с владением реализацией интерфейса IStream (или неявно приводимого к нему интерфейса), которая передается экземпляру this адаптера перегрузкой 2. Тип std::decay_t<RightAdapterType> должен задавать адаптер с владением через указатель, приводимый к типу const IStream*.
Параметры
rightАдаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру StreamCOwn, как если бы был выполнен вызов right.release_ownership().