boost/python/type_id.hpp

はじめに

<boost/python/type_id.hpp> は、<typeinfo> のような実行時型識別のための型および関数を提供する。主にコンパイラのバグやプラットフォーム固有の共有ライブラリとの相互作用に対する回避策のために存在する。

クラス

type_info クラス

class type_info : totally_ordered<type_info>

type_info インスタンスは型を識別する。std::type_info が規定しているとおり(ただしコンパイラによっては異なる実装をしている場合もある)、boost::python::type_info はトップレベルの参照や CV 指定子を表現しない(C++ 標準の 5.2.8 節を見よ)。std::type_info と異なり boost::python::type_info インスタンスはコピー可能であり、共有ライブラリ境界をまたいで確実に動作する。

type_info クラスの概要1

namespace boost { namespace python
{
  class type_info : totally_ordered<type_info>
  {
   public:
      // コンストラクタ
      type_info(std::type_info const& = typeid(void));

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

      // オブザーバ
      char const* name() const;
  };
}}

type_info クラスのコンストラクタ

type_info(std::type_info const& = typeid(void))
効果

引数と同じ型を識別する type_info オブジェクトを構築する。

根拠

type_info オブジェクトの配列の作成が必要になることがあるため、親切にも既定の引数が与えられている。

注釈

このコンストラクタはコンパイラの typeid() 実装の非準拠を修正しない。以下の type_id を見よ。

type_info クラスの比較関数

bool operator<(type_info const &rhs) const
効果

type_info オブジェクト間の全順序を与える。

bool operator==(type_info const &rhs) const
戻り値

2 つの値が同じ型を示す場合は true

注釈

totally_ordered<type_info> を非公開基底クラスとして使用すると、<=>=> および != が提供される。

type_info クラスのオブザーバ関数

char const *name() const
戻り値

オブジェクトの構築に使用した引数に対して name を呼び出した結果。

関数

operator<<

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

x が指定する型の説明を s に書き込む。

根拠

すべての C++ 実装が真に可読可能な type_info::name 文字列を提供するわけではないが、文字列を復号化して手ごろな表現を生成できる場合がある。

type_id

template<class T>
type_info type_id()
戻り値

type_info(typeid(T))

注釈

標準に非準拠ないくつかの C++ 実装において、コードは実際には上記のように単純ではない。その C++ 実装が標準に準拠しているかのように動作するようセマンティクスを調整する。

以下の例は、多少醜いが type_id 機能の使用方法を示している。

#include <boost/python/type_id.hpp>

// ユーザが int の引数を渡した場合にtrueを返す
template <class T>
bool is_int(T x)
{
   using boost::python::type_id;
   return type_id<T>() == type_id<int>();
}
1

boost::totally_ordered