
Eljay Love-Jensen wrote:
Hi Reece,
Cool! I think I'll add that to my repertoire.
Glad you like it :).
A slight tweak, and it can ignore the passed in value, and peep at errno. I'd call that "errnocheck" (or errnoCheck ... my orthographical standard).
Sure. The class I posted is an adaption of com::result that deals with Windows/COM HRESULT error handling that simplifies COM object usage. It may be possible to use a policy-based approach, something like: struct DefaultCheck { static bool IsError( int err ) { return( err < 0 ); } }; struct ErrNoCheck { static bool IsError( int err ) { return( errno < 0 ); // ??? } }; struct HRESULTCheck { static bool IsError( HRESULT hr ) { return( FAILED( hr )); } }; template< class ErrorPolicy = DefaultCheck, typename T = int > class errorcheck { public: inline errorcheck( T e ): error( e ) { if( ErrorPolicy::IsError( e )) throw( *this ); } // ... }; // example usage: errorcheck<> error; error = open( ... ); // ... errorcheck< ErrNoCheck > en; en = std::sin( -1 ); errorcheck< HRESULTCheck, HRESULT > hr; BSTR str; hr = pStyle -> get_color( &str ); or maybe to have extended information, so you could use something like: error( open( ... ), "open" ); en( ::sin( -1 ), errno ); en( ::cos( 0 )); // use errno by default Regards, Reece _________________________________________________________________ Express yourself with cool emoticons - download MSN Messenger today! http://www.msn.co.uk/messenger
participants (1)
-
Reece Dunn