我有一个模板化容器,将值存储在向量中。字符串或整数没有问题,但 size_t 值无法编译。编译器似乎假设我想用 int 而不是 size_t 值来初始化向量。我该如何解决这个问题?
#include <iostream>
#include <vector>
template <class ValueType>
class Container {
public:
template <typename... ValueTypes>
Container(ValueTypes&&... values) :
currentIndex(0),
values{ std::forward<ValueTypes>(values)... }
{}
const ValueType operator()() const {
return values[currentIndex];
}
protected:
size_t currentIndex;
std::vector<ValueType> values;
};
int main() {
Container<std::string> container1("10", "20", "30"); // ok
Container<int> container2(10, 20, 30); // ok
Container<size_t> container3(10, 20, 30); // compile error, assumed ints!
}
10
、20
和 30
确实是 int
文字,因此会出现缩小转换错误/警告。
您可以使用
u
(或 ULL
)后缀使它们字面符合 size_t
:
Container<size_t> container3(10u, 20u, 30u);