gpt4 book ai didi

c++ - 带或不带模板参数的模板类复制构造函数参数?

转载 作者:行者123 更新时间:2023-11-30 05:42:59 25 4
gpt4 key购买 nike

你好,下面两个是等价的:

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
/*...*/
};

所以我的问题是:我是否必须在复制构造函数中编写 classname withwithout 模板参数列表?如果我不写模板参数是否意味着其他版本(具有不同的模板参数)可以传递给复制构造函数?

所以如果我想从类 A 中使用模板参数实现它,例如:int,它的复制构造函数只接受 A使用相同模板参数(在我们的示例中:int),我是否必须将模板参数 (< T, K, ...>) 放在那里?

最佳答案

Do I have to write classname with or without the template argument list in the copy constructor or not?

它们是等价的。在模板范围内,name注入(inject)的类名,表示类name<T> .如果您指定模板参数,它也可以用作模板名称。

If I don't write the template arguments does it mean that then other versions (with different template argument) can be passed to the copy constructor?

不,没有参数它具体表示 name<T> .要允许从其他专业转换,您需要一个构造函数模板:

template <typename T2> name(name<T2> const & other);

请注意,这不会充当复制构造函数:如果您不想要隐式生成的构造函数,则需要单独声明它。

So if I want to achive that [...] it only accept A with the same template argument [...], do I have to put the template arguments (< T, K, ...>) there?

不,在那种情况下,您拥有的就可以了。

关于c++ - 带或不带模板参数的模板类复制构造函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30396305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com