爲什麼像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」必須表示兩種不同的類型,這是不可能的。 –