将shared_ptr <void>转换为shared_ptr <T>

时间:2019-12-16 11:41:52

标签: c++ c++11

考虑以下C ++代码:

    template<class T>
    std::shared_ptr<void> eraseType(std::shared_ptr<T> p) {
        return p;
    }

    template<class T>
    std::shared_ptr<T> castType(std::shared_ptr<void> p) {
        return p;
    }

    int main()
    {
        auto p = eraseType(std::make_shared<int>(42));
        auto x = castType<int>(p); <-- does not compile
    }

eraseType用于从T中删除类型shared_ptr<T>,以便以通用方式对其进行处理。

当然,由于caseType格式错误,因此代码无法编译。

假设我们知道shared_ptr<T>拥有适当的shared_ptr<void>,是否有办法从shared_ptr创建缩小的T

0 个答案:

没有答案