Aktywne Wpisy

WilkMcQuey +365
Treść przeznaczona dla osób powyżej 18 roku życia...

1-1-1-1 +166
Treść przeznaczona dla osób powyżej 18 roku życia...
Skopiuj link
Skopiuj link

Regulamin
Reklama
Kontakt
O nas
FAQ
Osiągnięcia
Ranking
int GetValue(std::string section, std::string key, int def) {
if (!ini.has(section)) return def;
if (!ini[section].has(key)) return def;
std::string& val = ini[section][key];
if (!val.empty()) {
return std::stoi(val);
}
else
{
return def;
}
val.clear();
}
I mam to zduplikowany dla każdej zmiennej np
bool GetValue,float GetValueitd.Da się to zrobić w jednej metodzie? np. jak w javie
T GetValue?#programowanie
W C++ możesz osiągnąć podobny efekt jak w Javie przy użyciu szablonów (ang. templates). Szablony pozwalają na definiowanie funkcji, które mogą działać z różnymi typami danych. Możesz stworzyć ogólną funkcję GetValue, która przyjmuje typ jako parametr szablonu. Oto jak mógłby wyglądać Twój kod:
#include <string>
#include <sstream>
#include
template <typename Config, typename Section, typename Key, typename Default>auto GetValue(const Config& config, const Section& section, const Key& key, const Default& def) -> decltype(def) {
if (!config.has(section)) return def;
if (!config[section].has(key))
Taki wasz obraz #programista15k
stoimożesz użyć strumieni, np. wrzucenie stringa dostd::stringstreami potem wyciągnięcia zmiennej danego typu tak jak byś wyciągał zstd::cin. inny sposób na uniwersalną konwersję toboost::lexical_cast, pod warunkiem, że masz boosta dostępnego