如何在不知道其类型的情况下初始化 shared_ptr?

How to initialize shared_ptr not knowing its type?

我有一个模板函数,应该得到 std::shared_ptr<sometype>。 在函数内部,我想用 std::shared_ptr<sometype> 创建一个临时变量,但我不能将某些类型作为模板参数,因为我不知道它。

#include <memory>

template<typename sometypePtr>
void foo()
{
    sometypePtr tmp_ptr = std::make_shared<sometype>();  //compilation error, because we don't know sometype
}

int main()
{
    foo<std::shared_ptr<int>>();

    return 0;
}

是否有一些常用的方法来制作 std::shared_ptr<sometype> 类型的变量?

假设sometypePtr是non-arraystd::shared_ptr,那么就可以用sometypePtr::element_type.

template<typename sometypePtr>
void foo()
{
    sometypePtr ptr = std::make_shared<typename sometypePtr::element_type>();
}

如果 sometypePtr 是数组 std::shared_ptr,您必须提供范围和类型。