I'm writing a class, like std::vector can be construct by n value or iterator [first, last), example code like below:
template<typename T>
class Test1{
public:
Test1(size_t n, const T& v){
data_ = new T[n];
for(size_t i = 0; i < n; ++n){
data_[i] = v;
}
}
template<typename Iterator>
Test1(Iterator first, Iterator last){
size_t n = std::distance(first, last);
data_ = new T[n];
while(first != last){
*data_++ = *first++;
}
}
Test1(){
if(nullptr != data_){
delete[] data_;
data_ = nullptr;
}
}
T* data_;
};
usage:
Test1<int> t1(2, 0);
std::vector<int> vec{1, 2, 3};
Test1<int> t2(vec.begin(), vec.end());
but compile error:
...
In instantiation of Test1<T>::Test1(Iterator, Iterator) [with Iterator = int; T = int]
error: invalid type argument of unary
...
so my question is how to realize the both function, why template can't be compile and how to change it(restrict iterator type)?
Aucun commentaire:
Enregistrer un commentaire