मैं एक कॉलबैक फ़ंक्शन जो एक boost::asio::deadline_timer
करने के लिए बाध्य कर रहा है। अब फ़ंक्शन को कॉल किया जाता है जब टाइमर रद्द हो जाता है या यह समाप्त हो जाता है। चूंकि मुझे इन दो मामलों के बीच अंतर करने की आवश्यकता है, इसलिए मुझे पास किए गए त्रुटि कोड की जांच करने की आवश्यकता है। बुनियादी कोड इस तरह होगा:उचित रूप से बूस्ट त्रुटि कोड का चयन कैसे करें?
void CameraCommand::handleTimeout(const boost::system::error_code& error)
{
std::cout << "\nError: " << error.message() << "\n";
return;
}
अब जब हैंडलर क्योंकि टाइमर समाप्त हो गई त्रुटि कोड Success
है कहा जाता है, जब टाइमर त्रुटि कोड को रद्द कर दिया है Operation canceled
है।
अब मेरे सवाल होगा, कैसे उचित रूप से जाँच करने के लिए क्या हुआ?
सुझाव 1:
if(error.message() == "Success")
{
// Timer expired
}
else
{
// Timer cancelled
}
सुझाव 2:
if(error.value() == 0)
{
// Timer expired
}
else
{
// Timer cancelled
}
अब मेरे सवाल है - वहाँ byitself और मूल्य द्वारा स्ट्रिंग द्वारा या नहीं त्रुटि तुलना करने के लिए किसी भी तरह से है? की तरह कुछ (यह अब तक किया जाता है)
if (error == boost::system::error::types::success)
क्योंकि मैं सिर्फ जांच है, जो मेरी राय में थोड़े अनावश्यक है के लिए एक स्ट्रिंग बनाने की जरूरत है कि क्या मैं पहला सुझाव के बारे में पसंद नहीं है है। दूसरी तरफ नुकसान है कि अगर मैं किसी और चीज की जांच करना चाहता हूं तो मुझे सभी त्रुटि कोड देखने की ज़रूरत है? तो वहाँ किसी भी enums या तरीके त्रुटि के लिए जाँच करने के लिए कर रहे हैं या मैं दोनों में से एक का सुझाव दिया है तरीके हैं?
ग्रेट - बिल्कुल जो मैं ढूंढ रहा था !!! धन्यवाद!!! – Toby
हम्म, मुझे यह गलत हो सकता है। यह कहता है कि हमें error_codes की तुलना में error_codes की तुलना करनी चाहिए और तुलना के लिए मान() का उपयोग नहीं करना चाहिए। http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-2.html –
यह गलत है। boost error_code में श्रेणियां और मान हैं। एक ही मूल्य एक से अधिक श्रेणियों में मौजूद हो सकता है। आपको दोनों को जांचना होगा। –