我有以下模式:
struct Wrapper
{
vector<shared_ptr<BaseType>> data;
template <typename DerivedType>
add(const DerivedType& e)
{
data.push_back(make_shared<DerivedType>(e));
};
}
我的
Wrapper
的目标是使用多态性,我希望能够将任何e
投射回其DerivedType
。
如果我在没有显式模板的情况下调用
add(e)
,类型推断可以将 e
解析为
DerivedType
。
e
解析为
BaseType
,即使它不是其最派生的类型?
make_shared<BaseType>(e)
是否会生成一个可以动态转换为
DerivedType
的共享指针?
模板推断是否也可以将仅当您将
e
解析为BaseType
,即使它不是其最派生的类型?
BaseType
变量传递给
add()
时。
如果是,不。 它会准确地创建您要求它创建的内容。 在本例中,它创建一个新的
make_shared<BaseType>(e)
是否会生成一个可以动态转换为DerivedType
的共享指针?
BaseType
,它是通过将
e
切片为
BaseType
来复制构造的。 新对象中不存在
DerivedType
。