6

boost::shared_polymorphic_downcastブースト1.52.01.53.0の間で消えました。リリース ノートではこれについて何も言及されておらず、コミット (r81463) には「shared_ptr キャストの更新」という不可解なログ メッセージのみが含まれています。

代わりに何を使用する必要があるのか​​、またはこの機能が削除された理由は明確ではありません。誰でも助けることができますか?

編集:洞察に満ちたコメントをありがとう。私は、boost が正当な理由や通知なしに、後方互換性のない変更をリリースに加えることに少し不満を感じています。しかし、応答に基づいて、1 行ではなく 2 行のコードでやりたいことができるので、それで十分だと思います。の古い動作を取得する簡単な方法を誰も提供していないため、この質問は「未回答」のままにしていboost::shared_polymorphic_downcastます。つまり、dynamic_castデバッグが有効な場合はa を使用し、static_castそうでない場合は a を使用します。

4

1 に答える 1

10

を使用しboost::dynamic_pointer_castます。

それが話している更新は、C++ 11 の設計に一致させることです。C++11 では、ポインター キャストは関数std::dynamic_pointer_cast(およびその仲間) として一般化されており、次のように記述できます。

template <typename PointerToBase> // models Base* in some way
void foo(PointerToBase ptr)
{
    auto ptrToDerived = std::dynamic_pointer_cast<Derived>(ptr);
}

そのため、ケースを記述しなくてPointerToBaseも、 rawBase*またはである可能性があります。std::shared_ptr<Base>

Boost はもちろん、C++ に可能な限り一致させたいだけです。

于 2013-02-07T03:43:44.350 に答える