C ++ Shortcut,初始化数组参数

时间:2014-10-17 23:28:52

标签: c++ c++11

假设我有一个带浮点数组的函数

    void SetColor(float* color);

我想调用那个函数。通常我会这样做

    float m_Color[4] = { 1.0f, 0.5f, 0.75f, 1.0f };
    SetColor( m_Color );

有更简洁的方法吗?

我期待的东西
    SetColor( { 1.0f, 0.5f, 0.75f, 1.0f } )

如果存在某种东西。

我不想更改参数类型,因为有时参数是硬编码的,但有时候是以编程方式设置的。

3 个答案:

答案 0 :(得分:3)

使用std::initializer_list

void SetColor(std::initializer_list<float> l) {
    DoSomething(l.begin(), l.end());
}

答案 1 :(得分:0)

没有数组文字这样的东西。如果可以,请SetColor()获取std::array<float, N>并传递该实例:

template <unsigned N>
void SetColor(std::array<float, N> color);

SetColor(std::array<float, 4>{{ 1.0f, 0.5f, 0.75f, 1.0f }});

如果您无法更改参数,std::array有一个data()成员函数,它返回指向其内部数组的指针:

SetColor(std::array<float, 4>{{ 1.0f, 0.5f, 0.75f, 1.0f }}.data());

答案 2 :(得分:0)

如果您将SetColor的签名更改为以下之一,则可以执行此操作:

void SetColor(std::initializer_list<float> color);

void SetColor(const std::vector<float>& color);

void SetColor(const std::array<float, 4>& color);

Demo