簡體   English   中英

模板類復制構造函數參數是否帶有模板參數?

[英]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,...>)?

不,在這種情況下,您所擁有的沒問題。

在模板定義中, namename<T>的簡寫(請參見第14.6.1節)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM