#include <ShoreApp.h>
	/////////////////////////////////////////////
	// Return the OID of T's persistent type object
	/////////////////////////////////////////////
shrc     Ref<T>::get_type(LOID &type_loid) const;
	/////////////////////////////////////////////
	// The combination of the macro TYPE_OBJECT
	// and the method isa() lets you cast references:
	//
	// returns a Ref<T> 
	// if "any" points to a T or subclass of T; 
	// otherwise they return a null ref:
	//
	// pardon the pseudo-code ...
	/////////////////////////////////////////////
const Ref<T> TYPE_OBJECT(T).isa(const Ref<U> &any);
{
    Ref<any>     aref;
    Ref<I>       iref;
    iref = TYPE_OBJECT(I).isa(a);
}
The first form of get_type returns the logical oid of the object's type object. If the ref is nil, LOID::null is returned.
The CPP macro TYPE_OBJECT(T) yields a reference to the compiled-in C++ type object for T. Uses of TYPE_OBJECT will not compile if the SDL language binding for T is not included at compile time.
The second form of get_type returns a pointer to the given object's C++ type object, even if the SDL language binding for T is not included at compile time. In that case, the C++ type object is constructed from the type's persistent object. A null pointer is returned if the reference is not to a Shore object.
Get_type obtains a SH-mode (share-mode) lock on the object.
The method isa returns typed references:
    iref = TYPE_OBJECT(T).isa(a);
If 
 any
points to a T or subclass of T, 
 any
is cast to a
 Ref<T>
and returned.
If not,
a null reference is returned.