Mam struct
, który posiada tablicę i chciałbym przekazać listę inicjatora do konstruktora struct, aby przekazać ją do tablicy. Aby zilustrować, próbowałem:Jaki jest poprawny sposób inicjowania tablicy elementów z listą inicjalizatora?
#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 dla v
ale dał błąd:
error: incompatible types in assignment of ‘std::initializer_list<float>’ to ‘float [3]’
Moją główną motywacją dla próbuje to zrobić, aby uniknąć po ostrzeżeniu, że clang generuje:
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
Moje pytanie brzmi: Jak zainicjować element członkowski z listy inicjalizatora? (Tj Jak mogę zrobić pierwszy pracę kodu? A może to nie jest możliwe?
W przypadku kruszywa nie potrzebowałbyś nawet ctor. Zwróć uwagę, że rozmiar 'initializer_list' jest zmienny. Istnieje również różnica między inicjowaniem z 'initializer-list' i _list-initialization_ (która jest konstrukcją językową i może prowadzić do wywoływania ctor używając listy inicjalizującej). – dyp
Naprawdę nie możesz tego zrobić, ale czy zamiast tego możesz użyć 'std :: array'? – juanchopanza
Mógłby użyć std :: array, ale przeczytałem to jako pytanie o język, a nie standardową bibliotekę. I, z całym szacunkiem dla każdego, powiedzenie komuś, by przeczytała standardową bibliotekę, przypomina opowiadanie maluchowi naukę języka angielskiego, czytając Szekspira. Zatem std :: array nie jest dobrą odpowiedzią. –