Nadal zarabiam moje skrzydła C++; Moje pytanie brzmi, czy mam struct tak:C++ initialize anonimowy struct
struct Height
{
int feet;
int inches;
};
I wtedy niektóre linie tak:
Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
Lubię inicjalizacji elemencie poprzez klamrami, ale ja wolę powyżej być w jednej linii, w anonimowej strukturze wysokości. Jak mam to zrobic? Moje początkowe naiwne podejście było następujące:
Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});
To jednak nie działało. Czy jestem daleko od tego?
To może być tylko przykładem, ale to chyba lepiej, aby zapisać 'Height' jako pojedynczy' dziedzinie inches'. Kiedy potrzebujesz stóp, możesz je zamienić na stopy; O wiele łatwiej jest poradzić sobie z pojedynczą jednostką niż żonglować wieloma jednostkami, zwłaszcza, że tak jak teraz, możesz mieć wiele wartości, które są równe, ale nie mają tej samej reprezentacji (np. '{2, 3}' i '{ 1, 15} "). –
C++ 1x zawiera [jednolitą składnię inicjalizacji] (http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization), która obsługuje coś takiego. Jest całkiem prawdopodobne, że Twój kompilator już to obsługuje. – sbi
Zamiast "Wysokość {5,7}" w konstruktorze Person, podaj '(struct Height) {5,7}' (jeśli przechodzisz przez odwołanie) (lub '& (struct Height) {5,7} 'jeśli podajesz wskaźnik). Zasadniczo przesyłasz listę inicjalizacyjną do żądanego typu. Jest to funkcja C99 +, ale powinna być również dostępna w C++. – Erhhung