
On 7/8/06, Felipe Magno de Almeida <felipe.m.almeida@gmail.com> wrote:
I prefer the pointer, that way one can define the variable inside the if
if(exception_info* p = get_exception_info(e)) {
}
I don't see the benefit in this since if exception_info is defined in the following sense: struct exception_info { exception_info() : is_valid(false) {}; exception_info(const exception_info & other) : is_valid(other.is_valid) {}; bool is_valid; ... operator bool () { // return true if it's a copy of a real // exception, false if it's uninitialized... return is_valid; } ... }; Then something like this will be possible: if (get_exception_info(e)) { std::cout << get_string<tag_file_name>(get_exception_info(e)) << std::endl; }
IMO, the pointer is cleaner.
Since a pointer is basically a primitive type which you can manipulate like an integral type, it opens up a can of worms you don't want to deal with -- and will only make the code a lot easier to get wrong. Since you can manipulate pointers like int's, the following operations will be valid: exception_info * x = get_exception_info(e); x++; ++x; But if you're using references, you give a cleaner and more definite handle to your data: exception_info & info (get_exception_info(e)); info ++; // won't work, unless operator++ is defined for exception_info HTH -- Dean Michael C. Berris C/C++ Software Architect Orange and Bronze Software Labs http://3w-agility.blogspot.com/ http://cplusplus-soup.blogspot.com/ Mobile: +639287291459 Email: dean [at] orangeandbronze [dot] com