Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Function Template close

Boost , ,

Function Template close

Description
When is close invoked?
Headers
Reference

Description

Библиотека Iostreams обеспечивает три перегрузки шаблона функций<close>.

Первая перегрузка<close>требует единого аргумента устройства. Это позволяет пользователю закрыть устройство, не беспокоясь о том, управляет ли устройство одной последовательностью или двумя последовательностями:

namespace boost { namespace iostreams {
              
template<typename T>     
void close(T& t);
} } // End namespace boost::io

Две другие перегрузки<close>редко должны вызываться пользователями библиотеки; они автоматически вызываются библиотекой, чтобы указатьФильтрыиУстройства, что последовательность данных вот-вот закончится. Это дает возможность фильтрам и устройствам освобождать ресурсы или сбрасывать их состояния при подготовке к новой последовательности символов. Фильтры и устройства, которые выполняют вывод, могут использовать возможность записи дополнительных данных до конца потока.

Когда и каким образом<close>вводится в заблуждение:

When is close invoked?

stream_buffer and stream

Когда экземпляр<stream_buffer>или<stream>на основе Устройства<d>закрыт с использованием функции члена<close>, выполняется следующая последовательность вызовов функций:

<

   boost::iostreams::close(d, std::ios_base::in);
    boost::iostreams::close(d, std::ios_base::out);
>

Эффект, если<D>являетсязакрываемыми контролирует одну последовательность, заключается в следующем:

    d.close();

Если<D>являетсязакрываемыми управляет отдельными входными и выходными последовательностями, эффект заключается в следующем:

    d.close(std::ios_base::in);
    d.close(std::ios_base::out);

Семантика<close>длятипов устройствниже.]

<filtering_streambuf>и<filtering_stream>

А<filtering_streambuf>или<filtering_stream>считается закрытой, если ее срок службы заканчивается, пока ее цепь завершена или если ее оконечное устройство удалено с использованием<pop>или<reset>. Когда это происходит, производится следующая последовательность вызовов, предполагая, что базовая последовательность фильтров и устройств<f1>,<f1>, ...,<fn-1>,<d>и соответствующая последовательность буферов потока<buf1>,<buf2>, ...,<bufn-1>,<bufn>:<close><

  usingnamespacestd;
    
   // Close each input sequence, in reverse order:
    boost::iostreams::close(d,n-1, bufn-1ios_base::in);
    boost::iostreams::close(fn-1, bufn,-1ios_base::in);
    boost::iostreams::close(fn-2, bufn-1, ios_base::in);
   ...
    boost::iostreams::close(f1,n-buf2,n-ios_base::in);
   // Close each output sequence, in order:
    boost::iostreams::close(f1,n-buf2,n-ios_base::out);
    boost::iostreams::close(f2,n-buf3,n-ios_base::out);
   ...
    boost::iostreams::close(fn-1, bufn,n-ios_base::out);
    boost::iostreams::close(d,n-1, bufn-1ios_base::out);
>

Это подразумевает

  • For filter chains consisting of read-only components, the elements of the chain are closed in reverse order
  • For filter chains consisting of write-only components, the elements of the chain are closed in forward order
  • Filters and Devices controlling separate input and output sequences receive two closure notifications, the first with argument ios_base::in and the second with argument ios_base::out.

См.семантику<close>дляфильтраиустройства, ниже.

Headers

<boost/iostreams/close.hpp>
<boost/iostreams/operations.hpp>

Reference

Synopsis

namespace boost { namespace iostreams {
              
template<typename T>     
void close(T& t);
              
template<typename T>     
void close(T& t, std::ios_base::openmode which);
template<typename T, typename Device>
void close(T& t, Device& next, std::ios_base::openmode which);
} } // End namespace boost::io

Function Template close — Convenience Function

Template Parameters

T- Модель одной из концепцийУстройства.

Семантика

<
template<typenameT>     
voidclose(T& t);
>

Это<close>вызова<close(t, std::ios_base::in)>, за которыми следует<close(t, std::ios_base::out)>. Он гарантирует, что<t>закрыт должным образом, независимо от режимаили<t>.

Функциональный шаблон<close>и #8212; Уведомление о закрытии для устройств

Параметры шаблонов

T- Модель одного из понятийУстройство.

Семантика

<
template<typenameT>     
voidclose(T& t, std::ios_base::openmode which);
>

Если<t>являетсяфильтрующим потоком или буфером потока,<close>вызывает<pop>, если<t>являетсяполным. Семантика зависит от своейкатегорииследующим образом:

<category<T>::type>семантика
конвертируемая в<input>, но не в<output> <t.pop()>, если<t>завершен и который == ios_base::in
otherwise <t.pop()>, если<t>завершено и<which == ios_base::out>

Семантика<close>для устройства<T>, отличного от фильтрующего потока или буфера потока, зависит от егокатегорииследующим образом:

category<T>::typesemantics
not convertible to closable_tag <flush>
convertible to closable_tag and to bidirectional Звонки<t.close(which)>
convertible to closable_tag and to input but not to output <t.close()>Если<which == ios_base::in>
convertible to closable_tag and to output but not to bidirectional <t.close()>Если<which == ios_base::out>

Короче говоря:

  • Если<T>не являетсяClosable,<close>вызывает<flush>.
  • Если<T>являетсяClosableи управляет двумя отдельными последовательностями,<close>делегирует функции члена<close>, принимая один<openmode>параметр.
  • В противном случае<close>делегирует функции члена<close>, не принимая никаких параметров, но только если ее<openmode>параметр соответствует режиму<T>

. Последнее условие не позволяет устройству, управляющему одной последовательностью, закрываться дважды подряд.

ПРИМЕЧАНИЕ:Начиная с Boost 1.35, вызов этой функции<openmode>, кроме<std::ios_base::in>или<std::ios_base::out>,обесценивается. Чтобы закрыть обе последовательности одновременно, используйте<

close(t)
>вместо<
close(t, std::ios_base::in | std::ios_base::out)
>.

Function Template close — Closure Notification for Filters

Template Parameters

T- Модель одной из концепций фильтра
Device- БлокировкаУстройство, чейрежимуточняет режим<T>.

Semantics

template<typename T, typename Device>
void close(T& t, Device& next, std::ios_base::openmode which);

Семантика<close>для типа фильтра<T>зависит от егокатегорииследующим образом:

category<T>::typesemantics
not convertible to closable_tag <flush>
convertible to closable_tag and to bidirectional Звонки<t.close(next, which)>
convertible to closable_tag and to input but not to output <t.close(next)>Если<which == ios_base::in>
convertible to closable_tag and to output but not to bidirectional <t.close(next)>Если<which == ios_base::out>

Короче говоря:

  • Если<T>неКлозибель,<close>вызывает<flush>.
  • Если<T>являетсяКлозибельи управляет двумя отдельными последовательностями,<close>делегирует функции члена<close>, принимая<openmode>и параметры буфера потока.
  • В противном случае<close>делегатов на членскую функцию<close>принимают один параметр буфера потока, но только если его<openmode>параметр соответствует режиму<T>.

Последнее условие не позволяет фильтру, управляющему одной последовательностью, закрываться дважды подряд.

Примечание:Начиная с Boost 1.35, вызов этой функции с<openmode>, отличным от<std::ios_base::in>или<std::ios_base::out>, являетсяобесцененным.


<close>Это поведение может быть отключено в случае<pop>путем вызова функции члена<set_auto_close>с аргументом<false>. См., например,<filtering_stream::set_auto_close>.


Статья Function Template close раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 10:47:35/0.0074300765991211/0