为什么像shared_ptr
这样的类在其构造函数中有另一个模板?通用复制构造函数
例如:
template<class T> class shared_ptr {
public:
template<class Y>
explicit shared_ptr(Y * p);
我一直在读斯科特迈尔斯的C++有效,项目45表示,它背后的想法是通过他们做出多态性可能;也就是说,从构建shared_ptr<B>
shared_ptr<A>
如果B从A
衍生而来,但没有定义诸如
explicit shared_ptr(T * p);
足够的构造?我的意思是,这段代码工作得很好:
class C1 {
};
class C2 : public C1 {
};
template<typename T>
class A
{
public:
A(T &a)
{
var1 = a;
}
T var1;
};
int main(int argc, char *argv[])
{
C2 c2;
A<C1> inst1(c2);
}
那么为什么我们需要另一个构造函数模板?
如果这两种类型不是使用继承而彼此派生的,但它们彼此之间可以转换* –
@Someprogrammerdude如果它们可以相互转换,我的解决方案“无论如何工作?因为该类将被实例化为某种类型,并且会发生常规转换,因为这是一些T的具体类。 –
即使两个不同类型的对象可以相互转换,但类型仍然不同。这意味着模板参数“T”必须表示两种不同的类型,这是不可能的。 –