[英]Template class copy constructor parameter with or without template argument?
您好,以下兩個是等效的:
template<class T>
class name {
public:
name() {/*...*/}
name(name const &o) {/*...*/} // WITHOUT TEMPLATE ARGUMENT
/*...*/
};
template<class T>
class name {
public:
name() {/*...*/}
name(name<T> const &o) {/*...*/} // WITH TEMPLATE ARGUMENT SPECIFIED
/*...*/
};
所以我的問題是:是否必須在復制構造函數中編寫帶有或不 帶有模板參數列表的類名 ? 如果我不編寫模板參數,是否意味着可以將其他版本(具有不同的模板參數)傳遞給副本構造函數?
所以,如果我想才達到從A類與模板參數如:INT,它的拷貝構造函數只接受用相同的模板參數(在我們的例子:int),我必須把模板參數(<T ,K,...>)在那兒嗎?
是否必須在復制構造函數中編寫帶有或不帶有模板參數列表的類名?
它們是等效的。 在模板范圍內, name
是注入的類名 ,表示類name<T>
。 如果指定模板參數,它也可以用作模板名稱。
如果我不編寫模板參數,是否意味着可以將其他版本(具有不同的模板參數)傳遞給副本構造函數?
不,沒有參數,它專門表示name<T>
。 要允許從其他專業轉換,您需要一個構造函數模板:
template <typename T2> name(name<T2> const & other);
請注意,這不會充當副本構造函數:如果您不希望隱式生成一個副本,則需要單獨聲明它。
因此,如果我想獲得僅接受具有相同模板參數[...]的A,我是否必須在此處放置模板參數(<T,K,...>)?
不,在這種情況下,您所擁有的沒問題。
在模板定義中, name
是name<T>
的簡寫(請參見第14.6.1節)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.