如何在不知道其类型的情况下初始化 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
,您必须提供范围和类型。
我有一个模板函数,应该得到 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
,您必须提供范围和类型。