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());
}