mamniciwszystko
mam w #cpp taki kod:

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 GetValue itd.
Da się to zrobić w jednej metodzie? np. jak w javie T GetValue?

#programowanie
  • Najlepsze
  • Wszystkie komentarze
c.....8
c.....8
@mamniciwszystko:
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
Saly
Saly
1
@mamniciwszystko: tak, np.

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))
Krecenieworatoprzyjemnoscsroga
Krecenieworatoprzyjemnoscsroga
@mamniciwszystko dosłownie wystarczy skopiować ten wpis i wkleić na chat gpt żeby dostać odpowiedź xD

Taki wasz obraz #programista15k
filozof900
Moroder
Moroder
  • adult
1
Treść przeznaczona dla osób powyżej 18 roku życia...
mamniciwszystko
@Krecenieworatoprzyjemnoscsroga: w c++ uczę się od dwóch dni. ChatGPT już mnie zawiódł przez ten czas
MamCieNaHita
@mamniciwszystko: do uniwersalnego konwertowania zamiast rodziny stoi możesz użyć strumieni, np. wrzucenie stringa do std::stringstream i potem wyciągnięcia zmiennej danego typu tak jak byś wyciągał z std::cin. inny sposób na uniwersalną konwersję to boost::lexical_cast, pod warunkiem, że masz boosta dostępnego