This subclass of PlExceptionBase
is used to represent
exceptions.
PlException
, there are convenience functions that create
and wrap a Prolog term, similar to the PL_domain_error(), etc.
The hierarchy allows catch
statements to easily handle
combinations.
A PlException
object contains a Prolog term, so its
what() method must be called either
within a Prolog predicate or within the context of a PlEngine
(and PlFrame
; see section
1.16). The term is copied so that it is available outside of the
context of the frame that created it.
std::exception *-- PlExceptionBase *-- PlException | *.. PlDomainError() | *.. PlExistenceError() | *.. PlGeneralError() | *.. PlInstantiationError() | *.. PlPermissionError() | *.. PlRepresentationError() | *.. PlResourceError() | *.. PlTypeError() | *.. PlUninstantiationError() | *.. PlUnknownError() *-- PlExceptionFailBase | *-- PlExceptionFail | *-- PlFail *-- PlEngineInitialisationFailed *-- PlOpenForeignFrameFailed
Note that everything under PlException
can contain a
Prolog term; if the what() method is
called, it must be within the context of a Prolog frame. If you wish to
pass the exception outside the frame, you can use the set_what_str()
method to avoid evaluating the term after it has been freed by Prolog:
try { PlCall("p(123)"); ... } catch ( PlException &ex ) { ex.set_what_str(); throw; // rethrow the exception }
Currently defined methods are:
...; try { PlCall("consult(load)"); } catch ( const PlException& ex ) { cerr << ex.as_string() << endl; }
A type error expresses that a term does not satisfy the expected basic Prolog type.
A domain error expresses that a term satisfies the basic
Prolog type expected, but is unacceptable to the restricted domain
expected by some operation. For example, the standard Prolog open/3
call expect an io_mode
(read, write, append, ...). If an
integer is provided, this is a type error, if an atom other
than one of the defined io-modes is provided it is a domain error.