c++ 如何从可变参数包初始化向量?

问题描述 投票:0回答:1

我有一个模板化容器,将值存储在向量中。字符串或整数没有问题,但 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!
}
c++ vector variadic-templates size-t
1个回答
0
投票

10
20
30
确实是
int
文字,因此会出现缩小转换错误/警告。

您可以使用

u
(或
ULL
)后缀使它们字面符合
size_t

Container<size_t> container3(10u, 20u, 30u);
© www.soinside.com 2019 - 2024. All rights reserved.