Modules | |
| group | Utility functions for passing arrays into argument lists. |
| The purpose of this utility is to make passing arrays into argument lists easier. | |
| group | Template classes for testing assertions at compile time. |
| group | Utility code for replacing calls to exit() with macros that result in thrown exceptions. |
| group | Utility code for throwing exceptions and setting breakpoints. |
Classes | |
| class | Teuchos::m_bad_cast |
| Exception class for bad cast. More... | |
Defines | |
| #define | TEUCHOS_STANDARD_CATCH_STATEMENTS(VERBOSE, ERR_STREAM, SUCCESS_FLAG) |
| Simple macro that catches and reports standard exceptions and other exceptions. | |
Functions | |
| template<class T_To, class T_From> | |
| T_To & | Teuchos::dyn_cast (T_From &from) |
Dynamic casting utility function meant to replace dynamic_cast<T&> by throwing a better documented error message. | |
| template<class T> | |
| const T & | Teuchos::getConst (T &t) |
| Return a constant reference to an object given a non-const reference. | |
|
|
Value: catch( const std::exception &excpt ) { \ if((VERBOSE)) { \ std::ostringstream oss; \ oss \ << "p="<<::Teuchos::GlobalMPISession::getRank()<<": *** Caught standard exception of type \'" \ <<typeid(excpt).name()<<"\' : " << excpt.what() << std::endl; \ (ERR_STREAM) << oss.str(); \ (SUCCESS_FLAG) = false; \ } \ } \ catch( ... ) { \ if((VERBOSE)) { \ std::ostringstream oss; \ oss << "p="<<::Teuchos::GlobalMPISession::getRank()<<": *** Caught an unknown exception\n"; \ (ERR_STREAM) << oss.str(); \ (SUCCESS_FLAG) = false; \ } \ }
This macro should be used to write simple
int main(...) { bool verbose = true; bool success = true; try { ... } TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose,std::cerr,success); return ( success ? 0 : 1 ); }
Definition at line 55 of file Teuchos_StandardCatchMacros.hpp. |
|
||||||||||
|
Dynamic casting utility function meant to replace
Existing uses of the built-in
C &c = dynamic_cast<C&>(a); are easily replaced as:
C &c = dyn_cast<C>(a); and that is it. One could write a perl script to do this automatically.
This utility function is designed to cast an object reference of type Consider the following class hierarchy:
class A {}; class B : public A {}; class C : public A {}; Now consider the following program: int main( int argc, char* argv[] ) { B b; A &a = b; try { std::cout << "\nTrying: dynamic_cast<C&>(a);\n"; dynamic_cast<C&>(a); } catch( const std::bad_cast &e ) { std::cout << "\nCaught std::bad_cast exception e where e.what() = \"" << e.what() << "\"\n"; } try { std::cout << "\nTrying: Teuchos::dyn_cast<C>(a);\n"; Teuchos::dyn_cast<C>(a); } catch( const std::bad_cast &e ) { std::cout << "\nCaught std::bad_cast exception e where e.what() = \"" << e.what() << "\"\n"; } return 0; } The above program will print something that looks like (compiled with g++ for example):
Trying: dynamic_cast<C&>(a); Caught std::bad_cast exception e where e.what() = "St8bad_cast" Trying: Teuchos::dyn_cast<C>(a); Caught std::bad_cast exception e where e.what() = "../../../../packages/teuchos/src/Teuchos_dyn_cast.cpp:46: true: dyn_cast<1C>(1A) : Error, the object with the concrete type '1B' (passed in through the interface type '1A') does not support the interface '1C' and the dynamic cast failed!"
The above program shows that the standard implementation of
Note that this function is inlined and does not incur any significant runtime performance penalty over the raw Definition at line 151 of file Teuchos_dyn_cast.hpp. |
|
||||||||||
|
Return a constant reference to an object given a non-const reference. This function just provides a shorthand notation for const_cast<const T&>(t) getCost(t) Definition at line 48 of file Teuchos_getConst.hpp. |
1.3.9.1