【发布时间】:2020-04-25 22:35:15
【问题描述】:
main函数第一行推演失败,不加额外模板参数如何解决
#include <iostream>
template <typename T>
class myVec{
size_t _size{};
size_t capacity{};
T* data{};
public:
myVec(size_t size = 0, T value = T{}):_size{size}, capacity{2 * _size}{
data = new T[capacity];
for(size_t index{}; index < _size; index++)
data[ index ] = T{};
}
template <typename ... Ts>
myVec( Ts&& ... vals):myVec{ sizeof...(vals)}{
size_t index{};
((data [ ++index ] = vals),...);
}
~myVec(){
delete[] data;
}
size_t size( ){
return _size;
}
/*the rest */
};
int main(){
myVec vec {1, 32, 5, 6};
for(size_t index{}; index < vec.size(); ++index )
std::cout << vec[ index ] << " ";
}
【问题讨论】:
-
你希望该行调用什么构造函数?
-
@cigien 对不起。见编辑
-
myVec<int>(size_t{5})创建一个包含五个0s 的向量,myVec<int>(5)创建一个包含一个5的向量。那是……微妙的。 -
@Barry 让我想起了统一初始化,只是没有大括号
标签: c++ c++17 variadic-templates type-deduction