but you can redefine the unexpected( ) mechanism as follow:
#include <exception>
#include <iostream>
class foo_exception : public std::exception
{
public:
virtual const char* what() const throw() { return "foo"; }
};
class bar_exception : public std::exception
{
public:
virtual const char* what() const throw() { return "bar"; }
};
void foo() throw(foo_exception)
{
throw bar_exception();
}
void my_unexpected()
{
std::cout << "unexpected exception thrown" << std::endl;
throw foo_exception();
}
int main(int argc, char** argv)
{
std::set_unexpected(my_unexpected);
try
{
foo();
}
catch(std::exception& e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
On mar, 2003-10-07 at 21:50, joey yandle wrote:
> >
> > throw specifiers are actually used in Glib, so they shouldn't cause any
> > porting issues that are not already there. Personally I love them - they
> > definitely help to improve your code quality.
> >
>
> I find throw() clauses in c++ to be worse than useless, and do nothing to
> improve code quality. Check out the following code:
>
> ========
> #include <exception>
> #include <iostream>
>
> class foo_exception : public std::exception {
> public:
> virtual const char* what() const throw() { return "foo"; }
> };
>
> class bar_exception : public std::exception {
> public:
> virtual const char* what() const throw() { return "bar"; }
> };
>
> void foo() throw(foo_exception) {
> throw bar_exception();
> }
>
> int main(int argc, char** argv) {
> try {
> foo();
> } catch(std::exception& e) {
> std::cout << e.what() << std::endl;
> }
>
> return 0;
> }
> ==========
>
> As you would expect, the throw() clause guarentees that foo() will only
> throw foo_exception. However, when bar_exception is thrown, the app
> abort()'s, because it can't throw() it.
>
> In Java, this code wouldn't compile; the compiler would insist on
> foo() either catching or throwing bar_exception. But in c++, this isn't
> the case. So by putting a throw() clause, we've guarenteed that the app
> will abort if presented with an exception not in the throw clause. I
> find this to be extremely bad ;(
>
> cheers,
> --
> If video games really affected kids, we'd all be running around in dark
> rooms, munching on pills, and listening to electronic music.
>
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
--
Lic. J. Abelardo Gutierrez
Linux Counter # 80026
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/MU dx s-:++>-: a C+++ UL++++$ P++>+++ L++++>+++++ E- W+ N o K- w---(+)$
O+>- M? V? PS+ PE- Y+ PGP++ t 5 X R+ tv b++ DI(+) D++
G e++ h--- r+++ y+++
------END GEEK CODE BLOCK------
Attachment:
signature.asc
Description: This is a digitally signed message part