【发布时间】:2015-08-08 21:36:07
【问题描述】:
我有以下情况:
Base 是一个基类。
T 是一个模板,它可以假定Base 的任何派生类。
底层为我提供来自Base 类的数据,我需要将其转换为上层(编写代码的层)上的特定类才能在用户级别上工作。
代码如下:
template <class T> class Access {
std::vector<std::unique_ptr<T> getData();
}
template <class T>
std::vector<std::unique_ptr<T> getData()
{
/// Get data from below layer
std::vector<std::unique_ptr<Base>> retData;
retData = getDataFromBelowLayer();
/// Now I have to cast Base to T
std::vector<std::unique_ptr<T>> retCastData;
for (auto &item : retData)
{
std::unique_ptr<T> = static_cast<T>(item); <<---- NOT WORKING
retCastData.push_back(std::move(item)); <<---- NOT WORKING
}
return retCastData;
}
如何有效地将收到的unique_ptr´s 的Base 类的vector 转换为unique_ptr´s 的unique_ptr´s 的vector 类型,如图所示。
感谢您的帮助。
【问题讨论】:
-
看起来像平常的
polymorphic_downcast -
见here。
-
上面的代码显然不是不工作的代码,因为它在完全不同的行上有错误。请提供实际的最小示例来演示实际问题(以及您尝试的解决方案),并包括生成的实际错误消息。
-
你怎么知道所有
Base实际上都是Ts?
标签: c++ c++11 vector unique-ptr