boost::any
オペランドValueType * unsafe_any_cast(any * operand)
に必要なことを行う、文書化されていない関数のセットが含まれています。any*
リファレンスのアドレスを取得して必要なものを取得することも、Boost はオープン ソースであるため、これらの関数テンプレートのセットにパッチを適用してany&
オペランドを取得することもできます。
次に、デバッグ ビルドで安全なバージョンを使用し、リリース ビルドで安全でないバージョンを使用するラッパーを作成します。ただし、少なくとも 1 つの追加を行います。デバッグ ラッパーは、無効なキャストに対してスローされた例外をキャッチし、デバッガーを呼び出すか、プログラムをクラッシュさせて、デバッグ モードでの実行時に無効なキャストが処理されないようにする必要があります。リリース ビルドが未定義の動作をするという事実を隠します。
また、Boost は安全でないバージョンを削除する権利を留保していることにも注意してください。
// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time.
したがって、これらの関数を使用する (またはany.hpp
それらを拡張するためのパッチを適用する) ことを決定した場合、コードが誰に配信されるかによって、許容される場合と許容されない場合がある、ある程度のメンテナンス義務を負うことになります。