-
首页
-
C4D R23.110 C++ SDK
ErrorInterface Class Reference
系统
#include <objectbase.h>
详细描述
ErrorInterface
is the base interface for errors.
ErrorInterface
itself cannot be instantiated, but there are several derived interfaces to indicate specific error conditions such as OutOfMemoryError, NullptrError or IllegalStateError.
An error typically contains file and line information (
GetLocation()
) and a message (
GetMessage()
). It may also have a stack trace (
GetStackTrace()
) and a cause (
GetCause()
), which is another error which caused this error.
Normally, errors shouldn't be used directly for return types of functions. Instead, you should use
Result<T>
which can hold a result value and an error. The macros
iferr
and
iferr_return
support
Result
to facilitate error handling.
Errors are typically created in statements like
return
IllegalStateError(
MAXON_SOURCE_LOCATION
,
"Object already contained in hierarchy."
_s);
The usage of MAXON_SOURCE_LOCATION ensures that file and line information is set correctly in the error. The message is optional, and you can also pass a cause as third argument to the constructor. Some error classes may add specific constructors with additional arguments. But errors also support method chaining if you want so set additional values like the stack trace:
The ToString implementation of errors supports the following format statements:
公共成员函数
|
Ptr
|
GetPtr
()
|
ConstPtr
|
GetPtr
() const
|
|
MAXON_ADD_TO_COPY_ON_WRITE_REFERENCE_CLASS
(protected:void Create(
MAXON_SOURCE_LOCATION_DECLARATION
) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(
MAXON_SOURCE_LOCATION_FORWARD
);} void Create(
MAXON_SOURCE_LOCATION_DECLARATION
, const
String
&msg) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(
MAXON_SOURCE_LOCATION_FORWARD
);e.SetMessage(msg);} void Create(
MAXON_SOURCE_LOCATION_DECLARATION
, const
String
&msg, const Error &cause) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(
MAXON_SOURCE_LOCATION_FORWARD
);e.SetMessage(msg);e.SetCause(cause);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(RefMemberType< S > DbgStop() {
DebugOutput
(
OUTPUT::DIAGNOSTIC
, static_cast< const typename S::ReferenceClass * >(this) ->
ToString
());
DebugStop
();return this->PrivateGetRefMember();} RefMemberType< S > CritStop() {
CriticalOutput
(static_cast< const typename S::ReferenceClass * >(this) ->
ToString
());return this->PrivateGetRefMember();} RefMemberType< S > DiagOutput() {
DiagnosticOutput
(static_cast< const typename S::ReferenceClass * >(this) ->
ToString
());return this->PrivateGetRefMember();})
|
const
MAXON_METHOD
SourceLocation
&
|
GetLocation
() const
|
MAXON_METHOD
void
|
SetLocation
(
MAXON_SOURCE_LOCATION_DECLARATION
)
|
MAXON_METHOD
Block
< void *const >
|
GetStackTrace
() const
|
MAXON_METHOD
void
|
SetStackTrace
(const
Block
< void *const > &trace)
|
MAXON_FUNCTION
void
|
SetStackTrace
(
Int
skip=
STACKTRACE_SKIP
)
|
MAXON_METHOD
String
|
GetMessage
() const
|
MAXON_METHOD
void
|
SetMessage
(const
String
&message)
|
const
MAXON_METHOD
Error &
|
GetCause
() const
|
MAXON_METHOD
void
|
SetCause
(const Error &cause)
|
MAXON_METHOD
void
|
GetMachine
(MachineRef &machine) const
|
MAXON_METHOD
void
|
SetMachine
(const MachineRef &machine)
|
MAXON_METHOD
Int
|
PrivateGetCode
() const
|
MAXON_METHOD
void
|
PrivateSetCode
(
Int
code)
|
MAXON_METHOD
void
|
PrivateSetPreallocation
(
ThreadReferencedError
preallocation) const
|
MAXON_METHOD
ThreadReferencedError
|
PrivateGetPreallocation
() const
|
MAXON_METHOD
void
|
PrivateSetDebugError
(const Error &cause) const
|
Ptr
|
GetPtr
()
|
ConstPtr
|
GetPtr
() const
|
template<typename INTERFACE = ObjectInterface>
|
const
MAXON_FUNCTION
maxon::Class
< typename INTERFACE::Hxx1::ReferenceClass > &
|
GetClass
() const
|
const
MAXON_FUNCTION
ClassInfo *
|
GetClassInfo
() const
|
template<typename REF >
|
const ComponentInfo &
|
GetComponentInfoOfSuper
(const REF *sptr,
OverloadRank0
) const
MAXON_IF_TARGET_DEBUG
(
|
template<typename REF , typename = typename REF::Component::ComponentClass>
|
const ComponentInfo &
|
GetComponentInfoOfSuper
(const REF *sptr,
OverloadRank1
) const
|
MAXON_FUNCTION
Bool
|
HasSameClass
(const
ObjectInterface
*obj) const
|
Result
< void >
|
CopyFrom
(const
ObjectInterface
*
src
)
|
Result
<
ObjectInterface
* >
|
Clone
() const
|
template<typename REFCLASS >
|
MAXON_FUNCTION
Result
< REFCLASS >
|
Clone
() const
|
template<typename I >
|
MAXON_FUNCTION
Bool
|
IsInstanceOf
() const
|
MAXON_FUNCTION
Bool
|
IsInstanceOf
(const
DataType
&type) const
|
MAXON_METHOD
String
|
ToString
(const
FormatStatement
*formatStatement=nullptr) const
|
MAXON_METHOD
Result
< void >
|
InitObject
(const void *argument)
|
MAXON_METHOD
Result
< void >
|
HandleMessage
(const
InternedId
&message, const void *argument)
|
MAXON_METHOD
Bool
|
IsEqual
(const
maxon::ObjectInterface
*other) const
|
MAXON_METHOD
COMPARERESULT
|
比较
(const
maxon::ObjectInterface
*other) const
|
MAXON_FUNCTION
HashInt
|
GetHashCode
() const
|
MAXON_METHOD
HashInt
|
GetHashCodeImpl
() const
|
MAXON_METHOD
HashValue
|
GetHashValueImpl
() const
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator==(std::nullptr_t) const { return
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), nullptr);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator!=(std::nullptr_t) const { return !
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), nullptr);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator==(const
ObjectInterface
*ref) const { return
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator!=(const
ObjectInterface
*ref) const { return !
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator==(
ObjectInterface
*ref) const { return
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(
Bool
operator!=(
ObjectInterface
*ref) const { return !
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(template< typename T >
Bool
operator==(T *ref) const { return
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
|
MAXON_ADD_TO_CONST_REFERENCE_CLASS
(template< typename T >
Bool
operator!=(T *ref) const { return !
RefCompare
<
MAXON_IS_COW_KIND
(S::Handler::KIND), true >::template
IsEqual
< const
ObjectInterface
*, const
ObjectInterface
* >(this->GetPointer(), ref);})
|
Bool
|
PrivateIsInstanceOf
(const
DataType
&type) const
|
Returns the stack trace of this error. This may be empty.
Sets the stack trace of this error to the current stack trace. The skip parameter allows to skip the topmost stack frames, which are typically insignificant as they include the SetStackTrace invocation itself.
Returns the cause of this error. A cause is itself an error of which the current error is a subsequent error.
Sets the cause of this error. A cause is itself an error of which the current error is a subsequent error.