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
