// Name: any.h
// Purpose: interface of wxAny
// Author: wxWidgets team
-// RCS-ID: $Id$
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
When compared to wxVariant, there are various internal implementation
differences as well. For instance, wxAny only allocates separate data
- object in heap for large (i.e. size in bytes more than
- WX_ANY_VALUE_BUFFER_SIZE) or non-POD (Plain Old Data) data types.
- Pointers, integers, bools etc. are fitted in the wxAny's internal buffer
- without need for any extra allocation. It is possible that wxAny cannot
- automatically determine if your own data structure is considered a
- POD or not, so you may need to declare it as such explicitly, using
- code like this:
+ object in heap for large objects (i.e. ones with size more than
+ WX_ANY_VALUE_BUFFER_SIZE, which at the time of writing is 16 bytes).
- @code
- #include "wx/meta/pod.h"
- WX_DECLARE_TYPE_POD(MyPodStruct)
- @endcode
-
- Be extra careful what you declare as Plain Old Data. It must be such data
- that can be copied with memcpy() without corrupting program integrity. For
- instance, POD structures usually cannot contain pointers or references to
- other data. wxRect, wxPoint, and wxSize are good examples of POD
- classes.
-
- Note that pointers to any and all types are already automatically
- declared as Plain Old Data.
+ @note When performing conversions between strings and floating point
+ numbers, the representation of numbers in C locale is always used.
+ I.e. @code wxAny("1.23").GetAs<double>() @endcode will always work,
+ even if the current locale uses comma as decimal separator.
@library{wxbase}
@category{data}
Returns the value type as wxAnyValueType instance.
@remarks You cannot reliably test whether two wxAnys are of
- same value type by simply comparing return values
- of wxAny::GetType(). Instead use
- wxAnyValueType::CheckType<T>() template function.
+ same value type by simply comparing return values
+ of wxAny::GetType(). Instead, use wxAny::HasSameType().
+
+ @see HasSameType()
*/
const wxAnyValueType* GetType() const;
/**
- Tests if wxAny is null (that is, whether there is data).
+ Returns @true if this and another wxAny have the same
+ value type.
+ */
+ bool HasSameType(const wxAny& other) const;
+
+ /**
+ Tests if wxAny is null (that is, whether there is no data).
*/
bool IsNull() const;