Wypełnianie wektora domyślnymi wartościami w konstruktorze

0

Czy kod napisany w ten sposób:

	vector<string> bandNames;
	bandNames.push_back("B02");
	bandNames.push_back("B03");
	bandNames.push_back("B04");
	bandNames.push_back("B05");
	bandNames.push_back("B06");
	bandNames.push_back("B07");
	bandNames.push_back("B8A");
	bandNames.push_back("B11");
	bandNames.push_back("B12");

Powinienem zrefaktoryzować na:

	vector<string> bandNames;
 
	bandNames.insert(bandNames.end(), { "B02", "B03", "B04", "B05", "B06", 
	"B06", "B07", "B8A", "B11", "B12" });

Czy dobrym pomysłem jest wczytywanie domyślnych wartości do konstruktora klasy z pliku konfiguracyjnego np. YAML?
Kiedy taką konfigurację odczytywać a kiedy zostawiać w kodzie (w tym przypadku bardzo mała szansa zmiany)

8

ja tam na codzień nie piszę w c++ ale czemu nie po prostu:

 vector<string> bandNames { "B02", "B03", "B04", "B05", "B06", "B06", "B07", "B8A", "B11", "B12" };

mamy rok '99 czy coś?
jeśli jest cień szansy że się zmienią to można wydzielić, chyba że to pociągnie za sobą i tak zmianę kodu

3
Marcin Marcin napisał(a):

Czy dobrym pomysłem jest wczytywanie domyślnych wartości do konstruktora klasy z pliku konfiguracyjnego np. YAML?
Kiedy taką konfigurację odczytywać a kiedy zostawiać w kodzie (w tym przypadku bardzo mała szansa zmiany)

To zależy Bracie - jeśli wartości nie jest jakoś dużo, czytaj mieszczą się w jednej linii, to lepiej zastosować sposób obscurity. Jeśli jest ich znacznie więcej, to owszem, można sobie poradzić poprzez złamanie linii, ale chyba lepiej wtedy użyć serii push_back(); w takim wypadku ja bym napisał obie wersje i porównał która wygląda bardziej czytelnie. Są jeszcze przypadki specjalne, jak na przykład moja klasa realizująca specjalną kolejność sortowania - tutaj celowo użyłem zestawu dopisań do końca wektora bo to dokładnie obrazuje jaka będzie finałowa kolejność.

Co zaś do odczytu wartości z pliku to należy zastosować w sytuacji, kiedy wartości wektora mogą się zmieniać, i mają być zachowywane pomiędzy kolejnymi uruchomieniami twojego programu. Skoro jak piszesz szansa na zmianę jest bardzo mała to nie ma co sobie głowy zawracać.

0

+1 dla @obscurity i @MasterBLB
Dodam jeszcze: nie wiem co potem z tym wektorem robisz i jak duży on jest ale może wystarczy użyć tablicy zamiast wektora... i do tego stałej tablicy?

A jeśli jesteś na C++98 (ale chyba nie?) to użyj boost::assign żeby zbliżyć się do tego co @obscurity podal.

1 użytkowników online, w tym zalogowanych: 0, gości: 1