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

System Library Reference

Boost , ,

boost.png (6897 bytes) System Library
Возвысить дом   Домашняя библиотека   Tutorial  Ссылка
Contents
Introduction
C++11
Macros
Deprecated names
Breaking changes
Header <boost/system/error_code.hpp>
Class error_category
   Class error_category synopsis
   Class error_category virtual members
   Class error_category non-virtual members
   Class error_category non-member functions
   Class error_category predefined objects
Class error_code
   Class error_code synopsis
   Class error_code constructors
   Class error_code modifiers
   Class error_code observers
Class error_condition
   Class error_condition synopsis
   Class error_condition constructors
   Class error_condition modifiers
   Class error_condition observers
throws object
Semantics of throws object
Non-member functions
Header <boost/system/system_error.hpp>
   Class system_error

Introduction

Эта справочная документация описывает компоненты, которые программы могут использовать для сообщения об условиях ошибок, исходящих из операционной системы или других низкоуровневых интерфейсов прикладных программ.

Повышаю. Компоненты системной библиотеки никогда не изменяют значения< errno>.

C++11

В библиотеке задокументировано использование нескольких функций C++11, включая< noexcept>и явные операторы преобразования. Реальная реализация использует функции C++11 только тогда, когда они доступны, и в противном случае возвращается к функциям C++03.

Macros

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

Macro Name Default Effect if defined
BOOST_ERROR_CODE_HEADER_ONLY Not defined. The implementation is header-only, and the Boost.System library is not built. Overrides other link and library macros.
BOOST_SYSTEM_DYN_LINK Defined if BOOST_ALL_DYN_LINK is defined, otherwise not defined. Boost.System library is dynamically linked. If not defined, static linking is assumed.
BOOST_SYSTEM_NO_LIB Defined if BOOST_ALL_NO_LIB is defined, otherwise not defined. Boost.System library does not use the Boost auto-link facility.
BOOST_SYSTEM_NO_DEPRECATED Not defined. Deprecated features are excluded.

Deprecated names

В процессе добавления Boost. В стандартной библиотеке C++0x комитет C++ изменил некоторые названия. Чтобы облегчить переход, буст. Система обесценивает старые имена, но продолжает их предоставлять, если не определен макрос<BOOST_SYSTEM_NO_DEPRECATED>.

Старое использование, теперь обесцененное Замена
<get_generic_category()> <generic_category()>
<get_system_category()> <system_category()>
<namespace posix> <namespace errc>
<namespace posix_error> <namespace errc>
<enum posix_errno> <enum errc_t>
<get_posix_category()> <generic_category()>
<posix_category> <generic_category()>
<errno_ecat> <generic_category()>
<native_ecat> <system_category()>

Breaking changes

Два статических конста заменяются функциями. Эти изменения лучше всего фиксируются путем глобального добавления () к этим именам, чтобы превратить их в функциональные вызовы.

Старое использование, теперь сломано Замена
<generic_category> <generic_category()>
<system_category> <system_category()>

Макросы BOOST_POSIX_API и BOOST_WINDOWS_API больше не поддерживаются.

Header <boost/system/error_code.hpp>

<boost/system/error_code.hpp> synopsis

namespace boost
{
  namespace system
  {
    class error_category;
    const error_category &  system_category() noexcept;
    const error_category &  generic_category() noexcept;
    class error_code;
    class error_condition;
    //  "Concept" helpers
    template< class T="" >
      struct is_error_code_enum { static const bool value = false; };
    template< class T="" >
      struct is_error_condition_enum { static const bool value = false; };
    //  generic error_conditions
    namespace errc
    {
      enum errc_t
      {
        success = 0,
        address_family_not_supported,   //EAFNOSUPPORT
        address_in_use,                 //EADDRINUSE
        address_not_available,          //EADDRNOTAVAIL
        already_connected,              //EISCONN
        argument_list_too_long,         //E2BIG
        argument_out_of_domain,         //EDOM
        bad_address,                    //EFAULT
        bad_file_descriptor,            //EBADF
        bad_message,                    //EBADMSG
        broken_pipe,                    //EPIPE
        connection_aborted,             //ECONNABORTED
        connection_already_in_progress, //EALREADY
        connection_refused,             //ECONNREFUSED
        connection_reset,               //ECONNRESET
        cross_device_link,              //EXDEV
        destination_address_required,   //EDESTADDRREQ
        device_or_resource_busy,        //EBUSY
        directory_not_empty,            //ENOTEMPTY
        executable_format_error,        //ENOEXEC
        file_exists,                    //EEXIST
        file_too_large,                 //EFBIG
        filename_too_long,              //ENAMETOOLONG
        function_not_supported,         //ENOSYS
        host_unreachable,               //EHOSTUNREACH
        identifier_removed,             //EIDRM
        illegal_byte_sequence,          //EILSEQ
        inappropriate_io_control_operation,//ENOTTY
        interrupted,                    //EINTR
        invalid_argument,               //EINVAL
        invalid_seek,                   //ESPIPE
        io_error,                       //EIO
        is_a_directory,                 //EISDIR
        message_size,                   //EMSGSIZE
        network_down,                   //ENETDOWN
        network_reset,                  //ENETRESET
        network_unreachable,            //ENETUNREACH
        no_buffer_space,                //ENOBUFS
        no_child_process,               //ECHILD
        no_link,                        //ENOLINK
        no_lock_available,              //ENOLCK
        no_message_available,           //ENODATA
        no_message,                     //ENOMSG
        no_protocol_option,             //ENOPROTOOPT
        no_space_on_device,             //ENOSPC
        no_stream_resources,            //ENOSR
        no_such_device_or_address,      //ENXIO
        no_such_device,                 //ENODEV
        no_such_file_or_directory,      //ENOENT
        no_such_process,                //ESRCH
        not_a_directory,                //ENOTDIR
        not_a_socket,                   //ENOTSOCK
        not_a_stream,                   //ENOSTR
        not_connected,                  //ENOTCONN
        not_enough_memory,              //ENOMEM
        not_supported,                  //ENOTSUP
        operation_canceled,             //ECANCELED
        operation_in_progress,          //EINPROGRESS
        operation_not_permitted,        //EPERM
        operation_not_supported,        //EOPNOTSUPP
        operation_would_block,          //EWOULDBLOCK
        owner_dead,                     //EOWNERDEAD
        permission_denied,              //EACCES
        protocol_error,                 //EPROTO
        protocol_not_supported,         //EPROTONOSUPPORT
        read_only_file_system,          //EROFS
        resource_deadlock_would_occur,  //EDEADLK
        resource_unavailable_try_again, //EAGAIN
        result_out_of_range,            //ERANGE
        state_not_recoverable,          //ENOTRECOVERABLE
        stream_timeout,                 //ETIME
        text_file_busy,                 //ETXTBSY
        timed_out,                      //ETIMEDOUT
        too_many_files_open_in_system,  //ENFILE
        too_many_files_open,            //EMFILE
        too_many_links,                 //EMLINK
        too_many_synbolic_link_levels,  //ELOOP
        value_too_large,                //EOVERFLOW
        wrong_protocol_type             //EPROTOTYPE
      };
    } // namespace errc
    template<> struct is_error_condition_enum<errc::errc_t>
      { static const bool value = true; };
    //  non-member functions
    bool operator==( const error_code & lhs, const error_code & rhs ) noexcept;
    bool operator==( const error_code & code, const error_condition & condition ) noexcept;
    bool operator==( const error_condition & condition, const error_code & code ) noexcept;
    bool operator==( const error_condition & lhs, const error_condition & rhs ) noexcept;
    bool operator!=( const error_code & lhs, const error_code & rhs ) noexcept;
    bool operator!=( const error_code & code, const error_condition & condition ) noexcept;
    bool operator!=( const error_condition & condition, const error_code & code ) noexcept;
    bool operator!=( const error_condition & lhs, const error_condition & rhs ) noexcept;
    bool operator<( const error_code & lhs, const error_code & rhs ) noexcept;
    bool operator<( const error_condition & lhs, const error_condition & rhs ) noexcept;
    error_code make_error_code( errc::errc_t e ) noexcept;
    error_condition make_error_condition( errc::errc_t e ) noexcept;
    template <class charT, class traits>
      std::basic_ostream<charT,traits>&
        operator<<( basic_ostream<charT,traits>& os, const error_code & ec );
    size_t hash_value( const error_code & ec );
  }
}

Значение каждой<errc_t>постоянной должно быть таким же, как значение<<cerrno>>макроса, показанного в приведенном выше синопсисе.

Пользователи могут специализироваться на шаблонах<is_error_code_enum>и< is_error_condition_enum>, чтобы указать, что тип имеет право на автоматические конверсии классов<error_code>и<error_condition>соответственно.

const error_category & system_category();

Возвращение:Ссылка на объект<error_category>, идентифицирующий ошибки, исходящие из операционной системы.

const error_category & generic_category();

Возвращение:Ссылка на объект<error_category>, идентифицирующий портативные условия ошибки.

Class error_category

Класс<error_category>определяет базовый класс для типов, используемых для идентификации источника и кодирования конкретной категории кода ошибки.

[Примечание:Классы могут быть получены из<error_category>для поддержки дополнительных категорий ошибок.— конец примечания

Класс<error_category>служит базовым классом для типов, используемых для идентификации источника и кодирования конкретной категории кода ошибки. Классы могут быть получены из<error_category>для поддержки категорий ошибок в дополнение к тем, которые определены в библиотеке Boost System. Такие классы должны вести себя так, как указано в настоящем подпункте. [править]Примечание:<error_category>объекты передаются по ссылке, и два таких объекта равны, если они имеют один и тот же адрес. Это означает, что приложения, использующие пользовательские<error_category>типы, должны создавать один объект каждого такого типа.— конец примечания

Class error_category synopsis

namespace boost
{
  namespace system
  {
    class error_category : public noncopyable
    {
    public:
      virtual ~error_category();
      virtual const char *     name() const noexcept = 0;
      virtual string           message( int ev ) const = 0;
      virtual error_condition  default_error_condition( int ev ) const noexcept;
      virtual bool             equivalent( int code, const error_condition & condition )
                                 const noexcept;
      virtual bool             equivalent( const error_code & code, int condition ) const noexcept;
      bool operator==( const error_category & rhs ) const noexcept;
      bool operator!=( const error_category & rhs ) const noexcept;
      bool operator< ( const error_category & rhs ) const noexcept;
    };
  }
}

Class error_category virtual members

Классы, полученные из<error_category>, должны вести себя так, как указано в этом подпункте.

virtual const char * name() const noexcept =0;

Возврат:строка, обозначающая категорию ошибки.

virtual string message( int ev ) const noexcept =0;

Возвращение:Строка, описывающая ошибку, обозначенную<ev>.

virtual error_condition default_error_condition( int ev ) const noexcept;

Возвращение: <error_condition( ev, *this )>.

 [--Note: Derived classes will typically convert ev to some portable error_category, such as generic_category(), and return it as an error_condition for that category. --end note]

virtual bool equivalent( int code, const error_condition & condition ) const noexcept;

Возвращение:<default_error_condition( code ) == condition>.

virtual bool equivalent( const error_code & code, int condition ) const noexcept;

Возвращение:<*this == code.category() && code.value() == condition>.

Class error_category non-virtual members

bool operator==( const error_category & rhs ) const noexcept;

Возвращение:<this == &rhs>.

bool operator!=( const error_category & rhs ) const noexcept;

Возвращение:<this != &rhs>.

bool operator<( const error_category & rhs ) const noexcept;

Возвращение:<std::less<const error_category*>()( this, &rhs  noexcept)>.

[Примечание:<std::less>обеспечивает полный порядок указателей.- конец примечания

Class error_code

Класс<error_code>описывает объект, используемый для хранения значений кода ошибки, таких как значения, исходящие из операционной системы
или других низкоуровневых интерфейсов прикладных программ.[Примечание:Класс<error_code>является дополнением к отчету об ошибках
.— конец примечания ]

Class error_code synopsis

namespace boost
{
  namespace system
  {
    class error_code {
    public:
      // constructors:
      error_code() noexcept;
      error_code( val, const error_category & cat ) noexcept;
      template <class ErrorCodeEnum>
        error_code( ErrorCodeEnum e ) noexcept;
      // modifiers:
      void assign( int val, const error_category & cat ) noexcept;
      template<typename ErrorCodeEnum>
        error_code & operator=( ErrorCodeEnum val ) noexcept;
      void clear() noexcept;
      // observers:
      int                    value() const noexcept;
      cont error_category &  category() const noexcept;
      error_condition        default_error_condition() const noexcept;
      string                 message() const;
      operator unspecified-bool-type() const;
    private:
      int val_;                     // exposition only
      const error_category * cat_;  // exposition only
    };
  }
}

Class error_code constructors

error_code() noexcept;

Эффекты:Конструирует объект типа<error_code>.

Постусловия:<val_ == 0 && cat_ == &system_category()>.

error_code( int val, const error_category & cat ) noexcept;

Эффекты:Конструирует объект типа<error_code>.

Постусловия:<val_ == val && cat_ == &cat>.

template <class ErrorCodeEnum>
  error_code( ErrorCodeEnum val ) noexcept;

Эффекты:Конструирует объект типа<error_code>.

Постусловия:<*this == make_error_code( val )>.

Замечания:Этот конструктор не должен участвовать в разрешении перегрузки, если<is_error_code_enum<ErrorCodeEnum>::value>не является<true>.

Class error_code modifiers

void assign( int val, const error_category & cat ) noexcept;

Постусловия:<val_ == val && cat_ == &cat>.

template<typename ErrorCodeEnum>
  error_code & operator=( ErrorCodeEnum val ) noexcept;

Постусловия:<*this == make_error_code( val )>.

Замечания:Этот оператор не должен участвовать в разрешении перегрузки, если<is_error_code_enum<ErrorCodeEnum>::value>не является<true>.

void clear() noexcept;

состояние:<value() == 0 && category() == system_category()>

Class error_code observers

int value() const noexcept;

Возвращение:<val_>.

const error_category & category() const noexcept;

Возвращение:<*cat_>.

error_condition default_error_condition() const noexcept;

Возвращение: <category().default_error_condition( value())>.

string message() const;

Возвращение: <category().message( value())>.

Бросок:Ничего.

operator unspecified-bool-type() const;

Возврат:если<value() != 0>, возвращает значение, которое будет оценивать<true>в булевом контексте; в противном случае возвращает значение, которое будет оценивать<false>в булевом контексте. Возвращаемый тип стоимости не может быть конвертирован в<int>.

Бросок:Ничего.

[Примечание:Это преобразование может использоваться в контекстах, где ожидается<bool>(например, условие<if>); однако неявные преобразования (например, в<int>), которые могут произойти с<bool>, не допускаются, устраняя некоторые источники ошибки пользователя. Одним из возможных вариантов реализации для этого типа является указатель на член.— конец примечания]

Class error_condition

Класс<error_condition>описывает объект, используемый для хранения значений, идентифицирующих условия ошибки.[Примечание:<error_condition>значения являются переносными абстракциями, а<error_code>значения являются специфичными для реализации.— конец примечания ]

Class error_condition synopsis

namespace boost
{
  namespace system
  {
    class error_condition
    {
    public:
      // constructors:
      error_condition() noexcept;
      error_condition( int val, const error_category & cat ) noexcept;
      template <class ErrorConditionEnum>
        error_condition( errorConditionEnum val ) noexcept;
      // modifiers:
      void assign( int val, const error_category & cat ) noexcept;
      template<typename ErrorConditionEnum>
        error_condition & operator=( ErrorConditionEnum val ) noexcept;
      void clear() noexcept;
      // observers:
      int value() const noexcept;
      const error_category & category() const noexcept;
      string message() const;
      operator unspecified-bool-type () const noexcept;
    private:
      int val_;                      // exposition only
      const error_category * cat_;   // exposition only
    };
  }
}

Class error_condition constructors

error_condition() noexcept; 

Эффекты:Построение объекта типа<error_condition>.

Постусловия:<val_ == 0 and cat_ == &generic_category()>.

error_condition( int val, const error_category & cat ) noexcept;

Эффекты:Построение объекта типа error_condition.

Постусловия:<val_ == val and cat_ == &cat>.

template <class ErrorConditionEnum>
  error_condition( ErrorConditionEnum e ) noexcept;

Эффекты:Построение объекта типа<error_condition>.

Постусловия:<*this == make_error_condition(e)>.

Замечания:Этот конструктор не должен участвовать в разрешении перегрузки, если<is_error_condition_enum<ErrorConditionEnum>::value>не является<true>.

Class error_condition modifiers

void assign( int val, const error_category & cat ) noexcept; 

Постусловия:<val_ == val and cat_ == &cat>.

template<typename ErrorConditionEnum>
  error_condition & operator=( ErrorConditionEnum e ) noexcept;

Постусловия:<*this == make_error_condition(e)>.

Возвращение:<*this>.

Замечания:Этот оператор не должен участвовать в разрешении перегрузки, если<is_error_condition_enum<ErrorConditionEnum>::value>не является<true>.

void clear() noexcept;

Пост-условие:<value() == 0 && category() == generic_category()>

Class error_condition observers

int value() const noexcept;

Возвращение:<val_>.

const error_category & category() const noexcept;

Возвращение:<*cat_>.

string message() const;

Возвращение:<category().message( value() )>.

operator unspecified-bool-type () const;

Возврат:Если<value() != 0>возвращает значение, которое будет оценивать<true>в булевом контексте; в противном случае возвращает значение, которое будет оценивать<false>. Тип возврата не должен быть конвертируемым в<int>.

Бросок:Ничего.

 [] Примечание:Это преобразование может использоваться в контекстах, где ожидается<bool>(например, условие if); однако неявные преобразования (например, в<int>), которые могут произойти с<bool>, не допускаются, устраняя некоторые источники ошибки пользователя. Одним из возможных вариантов реализации для этого типа является указатель на участника.-- конец примечания]

throws object

extern error_code throws;

Предопределенный<error_code>объект<throws>поставляется для использования в качестве тега "бросок по ошибке".

Semantics of throws object

Функции, которые определяют аргумент в форме<error_code& ec=throws>, с соответствующими квалификаторами пространства имен, имеют следующую семантику обработки ошибок:

Пост-условия:

Если<&ec != &throws>и произошла ошибка:

  • ec.value()возвращает номер конкретной ошибки реализации для конкретной ошибки, которая произошла.
  • ec.category()возвращает error_categoryдляec.value().

Если бы не было<&ec != &throws>и ошибки<ec.clear()>.

Броски:

Если ошибка возникает и<&ec == &throws>, бросает исключение типа<system_error>или типа, полученного из<system_error>. Функция члена исключения<code()>возвращает ссылку на<error_code>объект с поведением, указанным вПосткондиции.

Non-member functions

bool operator==( const error_code & lhs, const error_code & rhs ) noexcept;

Возвращение:<lhs.category() == rhs.category() && lhs.value() == rhs.value()>.

bool operator==( const error_code & code, const error_condition & condition ) noexcept;
bool operator==( const error_condition & condition, const error_code & code ) noexcept;

Возвращение:<code.category().equivalent( code.value(), condition )
|| condition.category().equivalent( code, condition.value() )
>.

bool operator==( const error_condition & lhs, const error_condition & rhs ) noexcept;

Возвращение:<lhs.category() == rhs.category() && lhs.value() == rhs.value()>.

bool operator!=( const error_code & lhs, const error_code & rhs ) noexcept;

Возвращение:<!(lhs == rhs )>.

bool operator!=( const error_code & code, const error_condition & condition ) noexcept;
bool operator!=( const error_condition & condition, const error_code & code ) noexcept;

Возвращение:<!( code ==  condition )>.

bool operator!=( const error_condition & lhs, const error_condition & rhs ) noexcept;

Возвращение:<!(lhs == rhs )>.

bool operator<( const error_code & lhs, const error_code & rhs ) noexcept;

Возвращение:<lhs.category() < rhs.category()
  || (lhs.category() == rhs.category() && lhs.value() < rhs.value())
>.

bool operator<( const error_condition & lhs, const error_condition & rhs ) noexcept;

Возвращение:<lhs.category() < rhs.category()
  || (lhs.category() == rhs.category() && lhs.value() < rhs.value())
>.

error_code make_error_code( errc::errc_t e ) noexcept;

Возвращение:<error_code( e, generic_category())>.

error_condition make_error_condition( errc::errc_t e ) noexcept;

Возвращение:<error_condition( static_cast<int>( e ), generic_category())>.

template <class charT, class traits>
  std::basic_ostream<charT,traits>&
    operator<<( basic_ostream<charT,traits>& os, const error_code & ec );

Эффекты:<os << ec.category().name() << ':' << ec.value()>.

Возвращение:<os>.

size_t hash_value( const error_code & ec );

Возврат:  значение хэша, представляющее<ec>.

Header <boost/system/system_error.hpp>

Class system_error

Класс<system_error>описывает объект исключения, используемый для сообщения об ошибках, которые связаны<error_code>. Такие ошибки обычно происходят из операционной системы или других низкоуровневых интерфейсов прикладных программ.

namespace boost
{
  namespace system
  {
    class system_error : public std::runtime_error
    {
    public:
      system_error( error_code ec );
      system_error( error_code ec, const char * what_arg );
      system_error( error_code ec, const std::string & what_arg );
      system_error( int ev, const error_category & ecat,
                    const char * what_arg );
      system_error( int ev, const error_category & ecat,
                    const std::string & what_arg );
      system_error( int ev, const error_category & ecat);
      const error_code & code() const throw();
      const char *       what() const throw();
    };
  }
}
system_error( error_code ec );

Эффекты:Построение объекта класса<system_error>.

Состояние:<code() == ec
  && std::strcmp( this->runtime_error::what(), "" ) == 0
>

system_error( error_code ec, const char * what_arg );

Эффекты:Построение объекта класса<system_error>.

Постусловие:<code() == ec
  && std::strcmp( this->runtime_error::what(), what_arg ) == 0
>

system_error( error_code ec, const std::string & what_arg );

Эффекты:Построение объекта класса<system_error>.

Постусловие:<code() == ec
  && std::strcmp( this->runtime_error::what(), what_arg.c_str() ) == 0
>

system_error( int ev, const error_category & ecat,
             const char * what_arg );

Эффекты:Построение объекта класса<system_error>.

Состояние:<code() == error_code( ev, ecat )
  && std::strcmp( this->runtime_error::what(), what_arg ) == 0
>

system_error( int ev, const error_category & ecat,
             const std::string & what_arg );

Эффекты:Построение объекта класса<system_error>.

Постсостояние:<code() == error_code( ev, ecat )
  && std::strcmp( this->runtime_error::what(), what_arg.c_str() ) == 0
>

system_error( int ev, const error_category & ecat );

Эффекты:Построение объекта класса<system_error>.

Состояние:<code() == error_code( ev, ecat )
  && std::strcmp( this->runtime_error::what(), "" ) == 0
>

const error_code & code() const;

Возврат:<ec>или<error_code( ev, ecat )>, от конструктора, в зависимости от обстоятельств.

const char * what() const;

Возвращение:Струна, включающая< this->runtime_error::what()>и< code.message()>.


Пересмотрено6 января 2014January 06, 2014 [ORIG_END] -->

© Авторское право Beman Dawes, 2006, 2007, 2008, 2013

Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:32:05/0.010225057601929/1