9 Eylül 2017 Cumartesi

system

Giriş
Bu kütüphane artık C++ standardına girdi. Açıklaması şöyle
The Boost System Library is part of the C++11 Standard Library.
boost system kütüphanesi normalde sadece header dosyalarından oluşmuyor. Linklemek gerekir. Linklemek için şöyle yaparız.
-lboost_system 
Eğer sadece header olarak kullanmak istersek BOOST_ERROR_CODE_HEADER_ONLY tanımlanır.

error_category Sınıfı
name metodu
İmzası şöyle
virtual const char* name() const noexcept;
message metodu
İmzası şöyle
virtual std::string message(int ev) const;
error_code Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/system/error_code.hpp>
Constructor
İmzası şöyle
error_code (int val, const error_category& cat);
Şöyle yaparız.
boost::system::error_code ec
ec = boost::system::error_code(
        ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ),
        boost::asio::error::get_ssl_category());
category metodu
Şöyle yaparız.
if (ec.category() == asio::error::get_ssl_category()) {...}
message metodu
std::string döner. Şöyle yaparız.
const boost::system::error_code ec = ...;
std::cout << error.message();
Bazı kodlarda std::string() ile şöyle yapılıyor ancak bu gereksiz.
boost::system::error_code ec = ...;

std::cout << "error : =" << ec.message().c_str() << std::endl; 
operator boolean
Şöyle yaparız.
const boost::system::error_code ec = ...;
if(ec)
{
  std::cout << error.message() << std::endl;
}     
operator != metodu
Şöyle yaparız.
if (ec != boost::asio::error::eof) {...}
operator << metodu
Bu metod aslında şuna denktir.
os << ec.category().name() << ':' << ec.value()
value metodu
Şöyle yaparız.
if (ec.value() == ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ)) {...}
Şöyle yaparız.

if (ec.value() == boost::asio::error::connection_reset)
{
  ...
} 
else if (ec.value() == boost::asio::error::eof)
{
  ...
}
else if (errorCode.value() != boost::asio::error::operation_aborted)
{
  ...
}
system_error Sınıfı
system_error Sınıfı yazısına  taşıdım.

Hiç yorum yok:

Yorum Gönder