Here is the code, and a really scaled down example so there is very little error checking. enjoy...
class CPtr{public: CPtr() { } CPtr(boost::any &myany): m_ptr(myany) { } CPtr &operator=( const CPtr &rhs ) { this->m_ptr = rhs.m_ptr; return *this; } template<typename T> T get( void ) { T pRet = NULL; try { pRet = boost::any_cast < T > ( m_ptr ); } catch (const boost::bad_any_cast &) { pRet = NULL; } return pRet; } static void RegisterPtr( asIScriptEngine *as ) { int err = as->RegisterObjectType("Ptr",sizeof(CPtr),asOBJ_CLASS | asOBJ_CLASS_CONSTRUCTOR ); assert( r >= 0 ); err = as->RegisterObjectBehaviour("Ptr", asBEHAVE_CONSTRUCT, "void CTor()", asFUNCTIONPR(Constructor, (CPtr*), void), asCALL_CDECL_OBJLAST);assert( r >= 0 ); err = as->RegisterObjectBehaviour("Ptr", asBEHAVE_ASSIGNMENT, "Ptr &f(const Ptr &in)",asMETHODPR(CPtr, operator =, (const CPtr&), CPtr&), asCALL_THISCALL);assert( r >= 0 ); }private: boost::any m_ptr;};// If you passing this back and forth to an object // you might have a script object like thisclass CMyScriptObj{ public: static void RegisterMyObj( asIScriptEngine *as ) { int r = engine->RegisterObjectMethod("MyScriptObject", "int setPtr(Ptr &in)", asMETHOD(CMyScriptObj,setPtr), asCALL_THISCALL); assert(r >= 0); r = engine->RegisterObjectMethod("MyScriptObject", "Ptr getPtr()", asMETHOD(CMyScriptObj,getPtr), asCALL_THISCALL); assert(r >= 0); } CPtr gePtr( void ) { return CPtr(boost::any(m_pObj)); } void setPtr( CPtr &ptrObj ) { CMyScriptObj* pMyObj = ptrObj.get<CMyScriptObj*>(); if(pMyObj) m_pObj = pMyObj; } private: CMyScriptObj* m_pObj;}// To use this in ASMyScriptObject object();Ptr ptr = object.getPtr();object.setPtr( ptr );
[size=1]'Behold! It is not over unknown seas but back over well-known years that your quest must go; back to the bright strange things of infancy and the quick sun-drenched glimpses of magic that old scenes brought to wide young eyes.'