我有一个结构体
,它持有一个数组,并且我想传递一个初始化列表到结构体的构造函数中并将其转发到这个数组。为了说明这一点,我尝试了以下代码:
#include <initializer_list>
struct Vector
{
float v[3];
Vector(std::initializer_list<float> values) : v{values} {}
};
int main()
{
Vector v = {1, 2, 3};
}
error: cannot convert ‘std::initializer_list<float>’ to ‘float’ in initialization
我尝试使用圆括号代替花括号 对于变量v
,但是这给出了以下错误:
error: incompatible types in assignment of ‘std::initializer_list<float>’ to ‘float [3]’
我的主要动机是为了避免clang生成的以下警告:
template <int N>
struct Vector
{
float v[N];
};
template <>
struct Vector<2>
{
float x, y;
};
int main()
{
Vector<2> v2 = {1.0f, 2.0f}; // Yay, works
Vector<3> v3 = {1.0f, 2.0f, 3.0f}; // Results in warning in clang++
Vector<3> u3 = {{1.0f, 2.0f, 3.0f}}; // Must use two braces to avoid warning
// If I could make Vector<N> take an initializer list in its constructor, I
// could forward that on to the member array and avoid using the double braces
}
警告:建议在子对象的初始化周围加上花括号
我的问题是:如何使用初始化列表初始化成员数组?(即,如何使第一个代码工作?或者这不可能吗?
initializer_list
的大小是可变的。使用initializer-list
进行初始化与列表初始化之间也有区别(这是一种语言结构,并可能导致使用initializer-list
调用构造函数)。 - dypstd::array
代替吗? - juanchopanza