首页 > 解决方案 > 如何将 int/float 可变参数推入向量?

问题描述

class Entity
{
private:
    std::vector<double> m_Numbers;
public:
    template<typename... Args>
    Entity(Args... parameters)
        : m_Numbers{ parameters... } {}
};

int main()
{
    Entity e1(5, 7);
}

没想到vector没有把ints转换成doubles,抛出了一个错误:

C2398 | 元素'0':从'int'到'_Ty'的转换需要缩小转换`

有没有办法std::vector<double>接受任何数字类型(例如int/ float/ uint32_t)?

标签: c++

解决方案


您可以执行显式转换为double.

    : m_Numbers{static_cast<double>(parameters)... } {}

问题是std::vector' 的构造函数需要doubles ,因为这是它存储的类型。由于您使用大括号初始化进行构造,因此不允许隐式转换,因此会发出警告(尽管使用 gcc 我只会收到警告)。


推荐阅读