我为模板类编写了默认的构造函数,该模板类将此处的所有值都标记为0。
我唯一的想法是检查 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
是否为字符串类型,然后像对待字符串一样使用它。
typename T
在vec(const size_t size_ = 0): _size(size_), values(_size? new T[_size]:0){
for(size_t i = 0; i < _size; i++)
values[i] = 0;
}
中,我是这样使用的:
main
但是出现以下错误:
错误:“ operator =”的模棱两可的重载(操作数类型为“ std :: __ cxx11 :: basic_string”和“ int”)
编辑: 类头看起来像这样:
vec<int> t1; // default constructor works perfectly
vec<string> s2; // ambiguous overload here (signing string to int)
答案 0 :(得分:9)
您不需要知道类型,只需要使用更好的初始化程序即可。代替使用0
或使用T{}
或{}
代替
vec(const size_t size_ = 0): _size(size_), values(_size? new T[_size]:0){
for(size_t i = 0; i < _size; i++)
values[i] = T{}; // or values[i] = {};
}
现在您将获得value initialized T
的任何类型T
的信息。
您可以使代码更短,只需使用
vec(const size_t size_ = 0): _size(size_), values(_size? new T[_size]{} : 0) {}
和T[_size]{}
将为您初始化整个数组的值。
此外,尽管0
是适当的空指针值,但您应该使用nullptr
。这更明确地表明您正在请求空指针,并且如果由于某种原因您的类型变为无指针也可以为您节省,因为它将导致编译器错误。