从数组构造一个跨度<shared_ptr<T>><shared_ptr<void>>

Construct a span<shared_ptr<T>> from an array<shared_ptr<void>>

本文关键字:lt gt shared ptr void 数组 一个      更新时间:2023-10-16

我有一个std::array<std::shared_ptr<void>, N>,我有方法可以将这个缓冲区的一部分作为不同类型的访问,我想用std::span<std::shared_ptr<T>>

有没有办法在不调用 UB 的情况下构造这样的跨度?

不,这是不可能的:无论void*转换为T*的能力如何,您都无法将void**(指向第一个指针的指针(转换为T**,因为那里没有实际的T*对象,并且您当然无法将任何不同ABstd::shared_ptr<A>*转换为std::shared_ptr<B>*-std::shared_ptr<T>不仅仅是内部的T*(因为控制块(, 即使是这样,您也不允许"解开"结构数组并将它们视为其内容的数组(std::complex的神奇例外(。