考虑以下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
?