2

boost::anyコンテナーに格納してさまざまな関数に渡すためのユニバーサル型として使用したいと思います。しかし、これらの関数内では常に実際の型を知っているので、実行時に型の安全性チェックは必要なく、課せられたオーバーヘッドでstatic_cast十分です。

理想的な解決策は のようなものを使用することですがboost::polymorphic_downcast、この場合は適用できないことがわかります。

独自のラッパーを作成する必要がありますか、void*それとも別のオプションがありますか?

4

1 に答える 1

1

shared_ptr<void>または unique_ptr を使用しstatic_castて を置き換えることができboost::any、次のような生のポインターshared_ptr<void>よりもいくつかの利点があります。void*

  • そのストレージを自動的に削除します
  • コード内の複数のオブジェクトから参照できます(これは必要ないかもしれません)

ただし、もちろん、この場合、すべてのポインター(参照カウントと削除用)により多くのメモリが必要です。

共有がうまくいかず、オブジェクトがコンテナ内でのみ所有される場合は、 も使用できますunique_ptr<void>

于 2013-05-22T14:53:55.880 に答える