2016-08-19 42 views
2

ライブラリでは、バイナリデータをvoid *として共有する必要があります。 共有するデータはshared_ptr<T>です。キャストstd :: shared_ptr <T> void *

キャストする方法はありますかshared_ptr<T>void *

PS:静的なキャストが動作しない:

error: invalid static_cast from type ‘std::shared_ptr<DataPacket>’ to type ‘void*’ static_cast<void *>(binData);

+0

static_castについて(binData.get()); ' – JVApen

+0

「バイナリデータを共有する」とはどういう意味ですか?誰と共有されましたか?彼らはそれの所有権を保持していますか? –

+0

@ JVApenの場合、binDataの型は 'T'です。ここでは' DataPacket'です。 – MSIS

答えて

4

あなたはこの間違っについてつもりです。あなたの問題は「shared_ptr<T>void*と解釈する必要がありません」—問題は「私はオブジェクトへのスマートポインタを持っており、そのオブジェクトへのダムポインタが必要」です。

shared_ptr<T>は、という正確にはの機能を持ちます。

shared_ptr<T> smart; 

// ... some code here points smart at an object ... 

T *dumb1 = smart.get(); // creates a dumb pointer to the object managed by smart 
void *dumb2 = smart.get(); // dumb pointers automatically convert to void* 

が、これはあなたがオブジェクトの寿命を確保するために世話をする必要がありますので、共有所有権制度に参加していない作成ダムポインタは限り、あなたはそれを必要と続くことに注意するように注意してくださいください。

関連する問題