Hallo, On Tue, May 10, 2022 at 11:54:52PM +0200, Sebastian Reinhardt wrote: > > struct config_values { > int config_number; > string config_name; > }; > > std::vector<config_values> config_vec > > ---------------------------------------- > > Als Beispieldaten habe ich folgende Werte: > > ---------------------------------------- > > config_vec[1].config_number = 4; > > config_vec[1].config_name = led_alarm; > > config_vec[2].config_number = 17; > > config_vec[2].config_name = led_normal; > > config_vec[3].config_number = 18; > > config_vec[3].config_name = valve_1; > > // usw......... > > ---------------------------------------- > > Nun möchte ich z.B. die Funktion "gpioWrite(GPIO_NO,Value)" nutzen, um die > LED aus- bzw. einzuschalten. Dafür mochte ich die GPIO-Nummer "4" durch eine > Variable ersetzen, in der die Nummer mit dem Suchstring "led_alarm" gefunden > wird, da ich per csv-Datei die Nummer neu zuordnen kann, ohne das Programm > neu zu kompilieren.
nu ja... namespace { int lookup(std::vector<config_values> const& v, std::string const& key) { auto it = find_if(begin(config_vec), end(config_vec), [key&](auto const& c) { return c.config_name == key; }); if (it != std::end(config_vec)) { return it->config_number; } throw std::runtime_error(std::string("invalid config key")); } } ... try { gpioWrite(::lookup(config_vec, "led_alarm"), 0); } catch (std::runtime_error const& e) { ... } oder Du nimmst halt ne std::map gleich vorn weg. Man könnte den vector dazu nachträglich umbauen eg. auto config_map = std::map<std::string, int>{} ; std::transform(begin(config_vec) end(config_vec), std::inserter(config_map), [](auto const& e) { return std::make_pair(e.config_name, e.config_number); }); gpioWrite(config_map["led_alarm"], 0); dat sieht zwar hübsch aus... hat aber kein Error handling.. eg. wenn Du nen lookup nach nem String machst, den's nicht gibt kommt 0 zurück... try { gpioWrite(config_map.at("led_alarm"), 0); } catch (std::out_of_range const& e) { ... } wäre eine Variante... ich hab den Code nicht durch den Compiler geschickt. Da mögen Fehler drin sein.. is bloss das Prinzip. Grüsse Andreas
signature.asc
Description: PGP signature