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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{function_begin|OutputByteStreamOwn& operator{{=}}(const OutputByteStreamOwn&) {{=}} delete; OutputByteStreamOwn& operator{{=}}(OutputByteStreamOwn&& right);|{{O…»)
 
Строка 1: Строка 1:
{{function_begin|OutputByteStreamOwn& operator{{=}}(const OutputByteStreamOwn&) {{=}} delete;
{{function_begin|OutputStreamOwn& operator{{=}}(OutputStreamOwn&& right); //1
OutputByteStreamOwn& operator{{=}}(OutputByteStreamOwn&& right);|{{OutputByteStreamOwn::operator{{=}} brief}}
template <class RightAdapterType>
# Удаленный оператор присваивания с копированием.
OutputByteStreamOwn& operator{{=}}(RightAdapterType&& right); //2
# Оператор присваивания с перемещением. Деассоциирует текущий экземпляр адаптера [[OutputByteStreamOwn]] от владеемого объекта, если это владение имело место до вызова, затем передает объект, ассоциированный с <tt>right</tt>, и его владение текущему экземпляру адаптера и диассоциирует <tt>right</tt> от объекта.}}
|{{OutputByteStreamOwn::operator{{=}} brief}}
{{function paramlist begin}}
# Оператор присваивания с перемещением, который переносит владение реализацией потока адаптеру {{cpp_this}}. Присваивание адаптеру разрешено, только если он не был до этого проинициализирован действительным адресом реализации потока или  был сброшен с помощью [[OutputByteStreamOwn::release_ownership]] или [[OutputByteStreamOwn::reset_ownership]] без параметров. В противном случае генерируются исключения - [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_unsupported_call_exception.html Chusov::Exceptions::UnsupportedCallException], если {{param|right}} не содержит реализации [[IOutputByteStream]], и [https://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_invalid_parameter_exception.html Chusov::Exceptions::InvalidParameterException] - в противном случае.
{{function paramlist add|right|Иной экземпляр адаптера, состояние которого передается текущему экземпляру в результате присваивания с перемещением. После вызова <source lang="cpp" inline>right.get_interface() == nullptr</source>.}}
# Аналогично, но с приведением типа указателя на реализацию с <source lang="cpp" inline>typename std::remove_reference_t<RightAdapterType>::interface_type*</source> к типу <source lang="cpp" inline>IOutputByteStream*</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>IOutputByteStream*</source>.}}
{{function paramlist end}}
{{function template paramlist begin}}
{{function template paramlist add|RightAdapterType|Тип адаптера с владением реализацией интерфейса [[IOutputByteStream]] (или неявно приводимого к нему интерфейса), которая передается экземпляру {{cpp_this}} адаптера перегрузкой 2. Тип <source lang="cpp" inline>std::decay_t<RightAdapterType></source> должен задавать адаптер с владением через указатель, приводимый к типу <source lang="cpp" inline>IOutputByteStream*</source>.}}
{{function template paramlist end}}
{{function_paramlist begin}}
{{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[OutputByteStreamOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}}
{{function_paramlist end}}
{{function_end}}
{{function_end}}
Для адаптеров <tt>x</tt> и <tt>y</tt> типа [[OutputByteStreamOwn]] в точке доступа к методу [[OutputByteStreamRef::reset_interface]] вызов
<source lang="cpp>
x = std::move(y);
</source>
эквивалентен вызовам
<source lang="cpp">
if (&x != &y)
    x.reset_interface(y.release_ownership());
</source>

Версия 17:08, 9 августа 2019

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

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

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