8 std::weak_ptr<Derived>
castWeakPtr(
const std::weak_ptr<Base>& baseWeakPtr) {
10 std::shared_ptr<Base> baseSharedPtr = baseWeakPtr.lock();
14 return std::weak_ptr<Derived>();
18 std::shared_ptr<Derived> derivedSharedPtr = std::dynamic_pointer_cast<Derived>(baseSharedPtr);
20 if (!derivedSharedPtr) {
22 return std::weak_ptr<Derived>();
26 return std::weak_ptr<Derived>(derivedSharedPtr);