#if wxUSE_EXTENDED_RTTI
+// ----------------------------------------------------------------------------
+// wxDynamicObject class, its instances connect to a 'super class instance'
+// ----------------------------------------------------------------------------
+
class WXDLLIMPEXP_BASE wxDynamicObject : public wxObject
{
friend class WXDLLIMPEXP_FWD_BASE wxDynamicClassInfo ;
wxDynamicObjectInternal *m_data;
};
+// ----------------------------------------------------------------------------
+// String conversion templates supporting older compilers
+// ----------------------------------------------------------------------------
+
+#if wxUSE_FUNC_TEMPLATE_POINTER
+# define wxTO_STRING(type) wxToStringConverter<type>
+# define wxTO_STRING_IMP(type)
+# define wxFROM_STRING(type) wxFromStringConverter<type>
+# define wxFROM_STRING_IMP(type)
+#else
+# define wxTO_STRING(type) ToString##type
+# define wxTO_STRING_IMP(type) \
+ inline void ToString##type( const wxAny& data, wxString &result ) \
+{ wxToStringConverter<type>(data, result); }
+
+# define wxFROM_STRING(type) FromString##type
+# define wxFROM_STRING_IMP(type) \
+ inline void FromString##type( const wxString& data, wxAny &result ) \
+{ wxFromStringConverter<type>(data, result); }
+#endif
+
#include "wx/xtiprop.h"
#include "wx/xtictor.h"
_DEFAULT_CONSTRUCTOR(name) \
_DEFAULT_CONVERTERS(name) \
void wxVariantToObjectConverter##name ( const wxAny &data, wxObjectFunctor* fn ) \
-{ (*fn)( &wxANY_AS(data, name) ); } \
+ { name o = wxANY_AS(data, name); (*fn)( &o ); } \
\
const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo,NULL }; \
wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit), \
wxT(#basename2), (int) sizeof(name), \
(wxObjectConstructorFn) 0);
-// templated streaming, every type must have their specialization for these methods
+// templated streaming, every type that can be converted to wxString
+// must have their specialization for these methods
template<typename T>
void wxStringReadValue( const wxString &s, T &data );