# wxAny Class Reference
[Data Structures]

`#include <wx/any.h>`

## Detailed Description

The wxAny class represents a container for any type.

Its value can be changed at run time, possibly to a different type of value.

wxAny is a backwards-incompatible (but convertible) successor class for wxVariant, essentially doing the same thing in a more modern, template- based manner and with transparent support for any user data type.

Some pseudo-code'ish example of use with arbitrary user data:

        void SomeFunction()
        {
            MyClass myObject;
            wxAny any = myObject;

            // Do something
            // ...

            // Let's do a sanity check to make sure that any still holds
            // data of correct type.
            if ( any.CheckType<MyClass>() )
            {
                // Thank goodness, still a correct type.
                MyClass myObject2 = any.As<MyClass>();
            }
            else
            {
                // Something has gone horribly wrong!
                wxFAIL();
            }
        }

When compared to wxVariant, there are various internal implementation differences as well. For instance, wxAny only allocates separate data 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).

##

Library: wxBase

Category: Data Structures

See also:
  wxAnyValueType, wxVariant, Caveats When Not Using C++ RTTI

## Public Member Functions
| wxAny ()
| Default constructor.
template<typename T >
| wxAny (const T &value)
| Constructs wxAny from data.
| wxAny (const wxAny &any)
| Constructs wxAny from another wxAny.
| wxAny (const wxVariant &variant)
| Constructs wxAny, converting value from wxVariant.
| ~wxAny ()
| Destructor.
template<typename T >
T | As () const
| This template function converts wxAny into given type.
template<typename T >
bool | CheckType () const
| Use this template function for checking if this wxAny holds a specific C++ data type.
template<typename T >
bool | GetAs (T *value) const
| Template function that retrieves and converts the value of this wxAny to the type that T* value is.
bool | GetAs (wxVariant *value) const
| Specialization of GetAs() that allows conversion of wxAny into wxVariant.
const wxAnyValueType * | GetType () const
| Returns the value type as wxAnyValueType instance.
bool | HasSameType (const wxAny &other) const
| Returns true if this and another wxAny have the same value type.
bool | IsNull () const
| Tests if wxAny is null (that is, whether there is no data).
void | MakeNull ()
| Makes wxAny null (that is, clears it).
Assignment operators
template<typename T >
wxAny & | operator= (const T &value)
wxAny & | operator= (const wxAny &any)
wxAny & | operator= (const wxVariant &variant)
Equality operators
Remarks: Generic template-based comparison operators have not been provided for various code consistency reasons, so for custom data types you have do something like this:
                    if ( any.CheckType<MyClass*>() &&
                         any.As<MyClass*>() == myObjectPtr )
                    {
                        // Do something if any stores myObjectPtr
                    }
bool | operator== (signed char value) const
bool | operator== (signed short value) const
bool | operator== (signed int value) const
bool | operator== (signed long value) const
bool | operator== (wxLongLong_t value) const
bool | operator== (unsigned char value) const
bool | operator== (unsigned short value) const
bool | operator== (unsigned int value) const
bool | operator== (unsigned long value) const
bool | operator== (wxULongLong_t value) const
bool | operator== (float value) const
bool | operator== (double value) const
bool | operator== (bool value) const
bool | operator== (const char *value) const
bool | operator== (const wchar_t *value) const
bool | operator== (const wxString &value) const
Inequality operators
bool | operator!= (signed char value) const
bool | operator!= (signed short value) const
bool | operator!= (signed int value) const
bool | operator!= (signed long value) const
bool | operator!= (wxLongLong_t value) const
bool | operator!= (unsigned char value) const
bool | operator!= (unsigned short value) const
bool | operator!= (unsigned int value) const
bool | operator!= (unsigned long value) const
bool | operator!= (wxULongLong_t value) const
bool | operator!= (float value) const
bool | operator!= (double value) const
bool | operator!= (bool value) const
bool | operator!= (const char *value) const
bool | operator!= (const wchar_t *value) const
bool | operator!= (const wxString &value) const

List of all members.

## Constructor & Destructor Documentation

wxAny::wxAny | ( |  | ) |

Default constructor.

It seeds the object with a null value.

template<typename T >

wxAny::wxAny | ( | const T & | value | ) | `[inline]`

Constructs wxAny from data.

wxAny::wxAny | ( | const wxAny & | any | ) |

Constructs wxAny from another wxAny.

wxAny::wxAny | ( | const wxVariant & | variant | ) |

Constructs wxAny, converting value from wxVariant.

Remarks:
  Because of this conversion, it is not usually possible to have wxAny that actually holds a wxVariant. If wxVariant cannot be converted to a specific data type, wxAny will then hold and manage reference to wxVariantData* similar to how wxVariant does.

wxAny::~wxAny | ( |  | ) |

Destructor.

## Member Function Documentation

template<typename T >

T wxAny::As | ( |  | ) | const`[inline]`

This template function converts wxAny into given type.

In most cases no type conversion is performed, so if the type is incorrect an assertion failure will occur.

Remarks:
  For conveniency, conversion is done when T is wxString. This is useful when a string literal (which are treated as const char* and const wchar_t*) has been assigned to wxAny.

This template function may not work properly with Visual C++ 6. For full compiler compatibility, please use wxANY_AS(any, T) macro instead.

template<typename T >

bool wxAny::CheckType | ( |  | ) | const`[inline]`

Use this template function for checking if this wxAny holds a specific C++ data type.

Remarks:
  This template function may not work properly with Visual C++ 6. For full compiler compatibility, please use wxANY_CHECK_TYPE(any, T) macro instead.

See also:
  wxAnyValueType::CheckType()

bool wxAny::GetAs | ( | wxVariant * | value | ) | const

Specialization of GetAs() that allows conversion of wxAny into wxVariant.

Returns:
  Returns true if conversion was successful. Conversion usually only fails if variant used custom wxVariantData that did not implement the wxAny to wxVariant conversion functions.

template<typename T >

bool wxAny::GetAs | ( | T * | value | ) | const`[inline]`

Template function that retrieves and converts the value of this wxAny to the type that T* value is.

Returns:
  Returns true if conversion was successful.

const wxAnyValueType* wxAny::GetType | ( |  | ) | const

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 wxAny::HasSameType().

See also:
  HasSameType()

bool wxAny::HasSameType | ( | const wxAny & | other | ) | const

Returns true if this and another wxAny have the same value type.

bool wxAny::IsNull | ( |  | ) | const

Tests if wxAny is null (that is, whether there is no data).

void wxAny::MakeNull | ( |  | ) |

Makes wxAny null (that is, clears it).

bool wxAny::operator!= | ( | const wxString & | value | ) | const

bool wxAny::operator!= | ( | const wchar_t * | value | ) | const

bool wxAny::operator!= | ( | const char * | value | ) | const

bool wxAny::operator!= | ( | bool | value | ) | const

bool wxAny::operator!= | ( | double | value | ) | const

bool wxAny::operator!= | ( | float | value | ) | const

bool wxAny::operator!= | ( | wxULongLong_t | value | ) | const

bool wxAny::operator!= | ( | unsigned long | value | ) | const

bool wxAny::operator!= | ( | unsigned int | value | ) | const

bool wxAny::operator!= | ( | unsigned short | value | ) | const

bool wxAny::operator!= | ( | unsigned char | value | ) | const

bool wxAny::operator!= | ( | wxLongLong_t | value | ) | const

bool wxAny::operator!= | ( | signed long | value | ) | const

bool wxAny::operator!= | ( | signed int | value | ) | const

bool wxAny::operator!= | ( | signed short | value | ) | const

bool wxAny::operator!= | ( | signed char | value | ) | const

wxAny& wxAny::operator= | ( | const wxVariant & | variant | ) |

wxAny& wxAny::operator= | ( | const wxAny & | any | ) |

template<typename T >

wxAny& wxAny::operator= | ( | const T & | value | ) | `[inline]`

bool wxAny::operator== | ( | const wxString & | value | ) | const

bool wxAny::operator== | ( | const wchar_t * | value | ) | const

bool wxAny::operator== | ( | const char * | value | ) | const

bool wxAny::operator== | ( | bool | value | ) | const

bool wxAny::operator== | ( | double | value | ) | const

bool wxAny::operator== | ( | float | value | ) | const

bool wxAny::operator== | ( | wxULongLong_t | value | ) | const

bool wxAny::operator== | ( | unsigned long | value | ) | const

bool wxAny::operator== | ( | unsigned int | value | ) | const

bool wxAny::operator== | ( | unsigned short | value | ) | const

bool wxAny::operator== | ( | unsigned char | value | ) | const

bool wxAny::operator== | ( | wxLongLong_t | value | ) | const

bool wxAny::operator== | ( | signed long | value | ) | const

bool wxAny::operator== | ( | signed int | value | ) | const

bool wxAny::operator== | ( | signed short | value | ) | const

bool wxAny::operator== | ( | signed char | value | ) | const

|  | [ top ]