C++ C++;快捷方式,就地初始化数组参数

C++ C++;快捷方式,就地初始化数组参数,c++,c++11,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 } ) 如果有的话 我不想更改参数类型,因为有时参数是硬编码的,但有时是以编程方式设置的。没

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

    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 } )
如果有的话


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

没有数组文本之类的东西。如果可以,使
SetColor()
获取
std::array
并传递该实例:

模板
void SetColor(标准::数组颜色);
SetColor(std::数组{{1.0f,0.5f,0.75f,1.0f});
如果无法更改参数,
std::array
有一个
data()
成员函数,该函数返回指向其内部数组的指针:

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

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

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

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

void SetColor(const std::array<float, 4>& color);
void SetColor(标准::初始值设定项\u列表颜色);
void SetColor(const std::vector&color);
void SetColor(const std::数组和颜色);
使用

void SetColor(标准::初始值设定项\u列表l){
DoSomething(l.begin(),l.end());
}

数组中的元素数是固定的吗?如果需要推导
N
,则不是后者。谢谢。不完全是我想要的。我希望有更干净的东西,但我的问题是有没有更干净的东西存在。@RussellTrahan这也行得通(但出于某种原因在g++上不行):
使用T=float[4];SetColor(T{1.0f,0.5f,0.75f,1.0f})。整洁多了。
void SetColor(std::initializer_list<float> l) {
    DoSomething(l.begin(), l.end());
}