7

void* を受け入れるメソッドを持つ外部ライブラリを使用しています

この void* が、boost::any オブジェクト内に含まれるオブジェクトを指すようにします。

boost::any オブジェクトのコンテンツのアドレスを取得することは可能ですか?

myAny.content で遊ぼうとしていますが、今のところうまくいきません! dynamic_cast または unsafe_any_cast の組み合わせで必要なものが得られることを願っています。

ありがとう!

4

2 に答える 2

5

を使用boost::any_castして、基になる型へのポインターを取得できます (コンパイル時にわかっている場合)。

boost::any any_i(5);

int* pi = boost::any_cast<int>(&any_i);
*pi = 6;

void* vpi = pi;
于 2012-06-28T14:09:13.677 に答える
3

残念ながら、これは不可能です。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.
于 2012-06-28T14:44:53.873 に答える