
Vladimir Prus wrote:
Eljay Love-Jensen wrote:
Take the Standard C Library. Create a new namespace, "boost::xtd::" for instance. For every function in the Standard C Library, create an analog in the "boost::xtd::" namespace. The analog function would have the same functional behavior as the StdCLib function, with the notable difference that any errors will generate an exception.
Personally, I find this to be a good idea. Whenever I had to write code like:
int controlling_tty = open(ctermid(0), O_RDWR); if (controlling_tty == -1) perror("open");
int result = tcsetpgrp(controlling_tty, parent_group); if (result == -1) perror("tcsetpgrp");
I really wish there were exception-throwing versions -- since that code is boring and still contains a couple of error-handling problems. However, most of the functions above are acutally from POSIX, not from standard C, so I'm not sure how much wrapped C functions would help me.
A trick I use when handling HRESULT error codes is to have a class like this (adapted for int error type): class errorcheck { private: int error; public: inline operator int() { return( error ); } public: inline errorcheck & operator=( int ec ) { error = ec; if( ec < 0 ) throw( *this ); return( *this ); } inline errorcheck & operator=( const errorecheck & ec ) { error = ec.error; return( *this ); } public: inline errorcheck( int ec ): error( ec ) { if( ec < 0 ) throw( *this ); } inline errorcheck( const errorcheck & ec ): error( ec.error ) { } }; try { errorcheck ec; ec = open(ctermid(0), O_RDWR); ec = tcsetpgrp(controlling_tty, parent_group); } catch( errocheck error ) { // ... } Regards, Reece _________________________________________________________________ It's fast, it's easy and it's free. Get MSN Messenger today! http://www.msn.co.uk/messenger