我有一個struct
持有一個數組,我想傳遞一個初始化列表到結構的構造函數被轉發到數組。爲了說明這一點,我想:用初始值設定項列表初始化成員數組的正確方法是什麼?
#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
I tried using parentheses instead of braces爲v
但給了錯誤:
error: incompatible types in assignment of ‘std::initializer_list<float>’ to ‘float [3]’
我對試圖做到這一點的主要動機是爲了避免下面警告叮噹:
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
}
warning: suggest braces around initialization of subobject
所以我的問題是:我怎樣才能初始化一個成員數組與初始化列表? (即我怎樣才能使第一個代碼工作?或者是不可能的?
對於一個聚合,你甚至不需要ctor。請注意'initializer_list'的大小是可變的。 initializer-list初始化和_list-initialization_(這是一種語言結構,並可能導致使用初始化器列表調用ctor)之間也有區別。 – dyp 2013-05-02 14:54:29
你真的不能這樣做,但是你可以使用'std :: array'嗎? – juanchopanza 2013-05-02 14:54:52
他可以使用std :: array,但是我把它看作是關於語言的問題,而不是標準庫。而且,在適當尊重任何人的情況下,告訴某人去讀標準圖書館就像告訴幼兒通過閱讀莎士比亞來學習英語一樣。所以std :: array不是一個很好的答案。 – 2016-03-02 00:32:35