void* を受け入れるメソッドを持つ外部ライブラリを使用しています
この void* が、boost::any オブジェクト内に含まれるオブジェクトを指すようにします。
boost::any オブジェクトのコンテンツのアドレスを取得することは可能ですか?
myAny.content で遊ぼうとしていますが、今のところうまくいきません! dynamic_cast または unsafe_any_cast の組み合わせで必要なものが得られることを願っています。
ありがとう!
を使用boost::any_cast
して、基になる型へのポインターを取得できます (コンパイル時にわかっている場合)。
boost::any any_i(5);
int* pi = boost::any_cast<int>(&any_i);
*pi = 6;
void* vpi = pi;
残念ながら、これは不可能です。boost::any_cast
タイプが含まれているタイプと異なる場合、キャストは拒否されます。
サポートされていない内部ハックを使用する場合、ヘッダーの現在のバージョンには、boost::unsafe_any_cast
(その名前が示すように) によって実行される型チェックをバイパスする、文書化されておらず、サポートされていない機能がありboost::any_cast
ます。
boost::any any_value(value);
void *content = boost::unsafe_any_cast<void *>(&any_value);
ヘッダーには、これについてunsafe_any_cast
次のように記載されています。
// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time. They are
// required where we know what type is stored in the any and can't
// use typeid() comparison, e.g., when our types may travel across
// different shared libraries.