2012-09-15 11 views
6

मान लिया जाये कि हम एक पुस्तकालय लिख रहे हैं और है कि हम त्रुटि और अपवादों से अधिक ठीक अनाज नियंत्रण प्रदान करना चाहते हैं:हमें std :: error_code संगत एपीआई को कैसे कार्यान्वित करना चाहिए?

void foo(); 
void foo(std::error_code&); 

सकता था कि हम एक std::system_error फेंकने के रूप में foo() को लागू करने और foo(std::error_code&) पकड़ सभी अपवाद है और error_code त्रुटि निकालें।

या क्या हम कभी भी फेंकने वाले फ़ंक्शन के रूप में foo(std::error_code&) को कार्यान्वित नहीं करेंगे और त्रुटि कोड की उपस्थिति के आधार पर foo() में फ़ंक्शन फेंक देंगे?

+1

उदाहरण के लिए boost :: asio देखें। http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_stream_socket/connect.html – ForEveR

+1

मैं कहूंगा कि यह भी 'foo() 'पर निर्भर करता है। – netcoder

उत्तर

3

boost पुस्तकालय अपवादों के साथ काम करता है और boost::system::error_code के साथ, इसलिए, मुझे लगता है कि आप इस पुस्तकालय पर उन्मुख कर सकते हैं। उदाहरण boost::asio::basic_stream_socket::connect के लिए दो संस्करणों

void connect(
    const endpoint_type & peer_endpoint); 

बढ़ावा :: प्रणाली :: system_error विफलता पर फेंक दिया है।

boost::system::error_code connect(
    const endpoint_type & peer_endpoint, 
    boost::system::error_code & ec); 

ec सेट इंगित करने के लिए क्या त्रुटि हुई है, यदि कोई हो।

लेकिन यह foo पर निर्भर करता है, मुझे लगता है।

-4

कम अपवाद हमेशा बेहतर होते हैं, इसलिए आपको दूसरे का उपयोग करना चाहिए।

संबंधित मुद्दे