error_code
ऑब्जेक्ट बनाने के लिए आपको त्रुटि कोड और श्रेणी के साथ आना होगा। यहाँ एक उदाहरण है, कि त्रुटि मानते हुए एक और मेजबान से इनकार कर कनेक्शन की वजह से है:
error_code ec (errc::connection_refused, system_category());
return ec;
तुम भी जब सिस्टम श्रेणी का उपयोग कर त्रुटि कोड के रूप में errno
मूल्य पारित कर सकते हैं। उदाहरण के लिए:
#include <fstream>
#include <cerrno>
#include <boost/system/system_error.hpp>
void foo()
{
ifstream file ("test.txt");
if (!file.is_open())
{
int err_code = errno;
boost::system::error_code ec (err_code
, boost::system::system_category());
throw boost::system::system_error (ec, "cannot open file");
}
}
दुर्भाग्य से, इस पुस्तकालय खराब documented है, इसलिए मैं header files में देखना बातें पता लगाने की सिफारिश कर सकते हैं आप। कोड काफी सरल और सीधे आगे है।
बस यदि आपका कंपाइलर सी ++ 11 का समर्थन करता है और आप इसका उपयोग करने के इच्छुक हैं, तो इस कार्यक्षमता ने इसे मानक बना दिया है। जहां तक मुझे पता है कि जीसीसी 4.6.1 में यह पहले से ही है। यहाँ एक सरल उदाहरण है:
#include <cerrno>
#include <system_error>
std::error_code
SystemError::getLastError()
{
int err_code = errno;
return std::error_code (err_code, std::system_category());
}
void foo()
{
throw std::system_error (getLastError(), "something went wrong");
}
आम तौर पर, पुस्तकालयों के आसपास error_code
वस्तु पारित अगर वहाँ फेंक और system_error
का उपयोग एक अपवाद सिस्टम विफलता का वर्णन फेंक करने की कोई जरूरत नहीं है। बिना किसी अपवाद के error_code
का उपयोग करने का एक अन्य कारण यह है कि जब आपको विभिन्न धागे में त्रुटि को सिग्नल करने की आवश्यकता होती है। लेकिन सी ++ 11 में a solution for propagating exceptions across threads है।
उम्मीद है कि यह मदद करता है!
स्रोत
2011-09-30 22:17:25