Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

boost/python/type_id.hpp

Introduction
Class template type_info
Functions
Example

<boost/python/type_id.hpp> provides types and functions for runtime type identification like those of of <typeinfo>. It exists mostly to work around certain compiler bugs and platform-dependent interactions with shared libraries.

type_info instances identify a type. As std::type_info is specified to (but unlike its implementation in some compilers), boost::python::type_info never represents top-level references or cv-qualification (see section 5.2.8 in the C++ standard). Unlike std::type_info, boost::python::type_info instances are copyable, and comparisons always work reliably across shared library boundaries.

namespace boost { namespace python
{
  class type_info : totally_ordered<type_info>
  {
  public:
    // constructor
    type_info(std::type_info const& = typeid(void));

    // comparisons
    bool operator<(type_info const& rhs) const;
    bool operator==(type_info const& rhs) const;

    // observers
    char const* name() const;
  };
}}
type_info(std::type_info const& = typeid(void));

Effects

constructs a type_info object which identifies the same type as its argument.

Rationale

Since it is occasionally necessary to make an array of type_info objects a benign default argument is supplied. Note: this constructor does not correct for non-conformance of compiler typeid() implementations. See type_id, below.

bool operator<(type_info const &rhs) const;

Effects

yields a total order over type_info objects.

bool operator==(type_info const &rhs) const;

Returns

true iff the two values describe the same type.

Note

The use of totally_ordered<type_info> as a private base class supplies operators <=, >=, >, and !=

char const* name() const;

Returns

The result of calling name() on the argument used to construct the object.

std::ostream& operator<<(std::ostream&s, type_info const&x);

Effects

Writes a description of the type described by to x into s.

Rationale

Not every C++ implementation provides a truly human-readable type_info::name() string, but for some we may be able to decode the string and produce a reasonable representation.

Note

On some non-conforming C++ implementations, the code is not actually as simple as described above; the semantics are adjusted to work as-if the C++ implementation were conforming.

template <class T> type_info type_id()

Returns

type_info(typeid(T))

Note

On some non-conforming C++ implementations, the code is not actually as simple as described above; the semantics are adjusted to work as-if the C++ implementation were conforming.

The following example, though silly, illustrates how the type_id facility might be used

#include <boost/python/type_id.hpp>

// Returns true iff the user passes an int argument
template <class T>
bool is_int(T x)
{
   using boost::python::type_id;
   return type_id<T>() == type_id<int>();
}

PrevUpHomeNext