-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi,
> The current interface of Glib::KeyFile::get_* functions is quite > inconvenient as exceptions are the only reliable way to receive > error conditions. Consider the following example: > > Glib::KeyFile f; <...> int x = f.get_integer("a", "b"); // (1) > > There are two possible error conditions that may cause (1) to > fail: * there's no key "b" in group "a" * the value of the key "b" > in group "a" is not an integer One external thing to consider here is "who edits key files". I don't expect non-pro guy doing anything there, so key files probably are unlikely to be broken (low probability). > Whereas the former condition can be checked for via > KeyFile::has_key, to check for the latter, one has only the > following two options: * catch the thrown exception * get the value > via get_string and use a separate function to parse it > > Both of these approaches are not optimal. I think the situation > could be improved. > > My proposal is as follows: > > * A new class template Glib::Optional<T> is created. The new class > template would be identical to boost::optional[1]. > > * A new family of functions for reading a keyfile is created (say, > for example, get_*_opt). The new functions would return > Glib::Optional<T> instead of T. All error conditions would be > reported by returning 'empty' optional object. The new functions > would not throw any exceptions on any circumstances. > > This would allow much simpler usage of the API. For example: > > Glib::KeyFile f; <...> auto opt = f.get_integer_opt("a", "b"); // > let's say we can use C++11 if (opt) { // utilize the value in *opt > int r = *opt; <...> } Do think that "if" is more convenient that "try-catch"? I'm not sure about that. If you think of more convenient getter for key, I'd think of passing default value as last argument, that would be returned in case key is missing or not valid. I think that would cover most of the cases, the remaining few could deal with exceptions. - -- Aurimas -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.15 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJSvH3sAAoJECtTeRAzEaLP3EEH+gJFPEZYwcV77j7/v0L7olAa /YXt1IUxZrHU+qKLAeXUSCOopP0XHNfQdAjEmOCYgjbkx/FD2gW4wYhZqvSFH/4o hfQ2r5hAgGTsqubzH3fMxPr0znONsTJyOE7vrBR9hsITQBjezb5iGLDH6sRex1Xl rrp9QRttZSO/h+hrjpTAWRRm5tZvN7EhUyYC8hcu/kdFlTwN+XALw0gkDTim271v iO/TaqumBQoIx7oOU8u8czrQ1Ay7nujxRLuxHptm4707RTi7pa7qdc0NEEXExK7Z KerSm9NRBcPMM7BpohKDP0uYdvFQOu8xzfSVz1DxddbabtD4y4GDhZDP8eqUrJk= =gTsV -----END PGP SIGNATURE----- _______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list