我对C++很陌生,但我似乎找不到这个问题的答案。
如果我有一个类模板 <Type>
的构造函数,其对象类型为 ClassA<Type>
我有另一个类以如下方式派生。class ClassB : public ClassA<Animal>
,我是否可以传入一个类型为: classB
到第一个构造函数中?
这完全取决于构造函数是否通过referencepointer接受参数。 如果不是,那么对象将是 切片 变成 ClassA<Type>
.
#include <memory>
template <typename Type>
class ClassA {};
class ClassB : public ClassA<Animal> {};
template <typename Type>
class ClassUser1 {
public:
explicit ClassUser1(ClassA<Type>);
}
template <typename Type>
class ClassUser2 {
public:
explicit ClassUser2(std::unique_ptr<ClassA<Type>>);
}
在这个设置中,调用 ClassUser1<Animal>::ClassUser1{ClassB{}}
将建造一个临时 ClassB
,它将被用来移动-构建一个 ClassA<Animal>
(对对象进行切片)。
调用 ClassUser2<Animal>::ClassUser2{std::make_unique<ClassB>()}
将会像你期望的那样工作;指向的实例仍然是一个 ClassB
.