Go Down

Topic: "Array of Functions" gesucht (Read 783 times) previous topic - next topic

Helmuth

Hallo Forum!

Problem: In Abhängigkeit von einem Array of Boolean sollen viele verschiedene Unterfunktionen aufgerufen werden.

Momentan mache ich das sinngemäß mit einer langen Liste von

if (data[0] = TRUE)  {action0();}
if (data[1] = TRUE)  {action1();}
usw.

Gibt es eine Möglichkeit, das elegant in einer Schleife zu machen? So hier wäre cool:

for (int index = 0; index < max_actions; index++)   {
  if (data[index] = TRUE) {action[index]();}
  }

Ich hoffe, mein Anliegen ist verständlich?!
Gesucht ist sozusagen ein Konstrukt, um ein "Array of Functions" zu beschreiben.
Wozu? Mein Code ist dermaßen unübersichtlich geworden, dass es sehr mühsam ist, neue Funktionen (action0 bis actionxx) einzubinden.

Was kann man da machen?

Grüße

Helmuth


Serenifly

Code: [Select]

data[0] = TRUE

Vorsicht. Beliebter Fehler. Vergleiche gehen mit ==


Schau dir erst mal Funktionszeiger an:
http://www.elektronik-bastelkeller.de/C_Ardu_8_5.php

Dann kannst du dir auch ein Array aus Funktionszeigern anlegen:
http://www.elektronik-bastelkeller.de/C_Ardu_8_7.php


Jomelo

Ich verwende bei mir in den Libs  "simpleThreads" und "LcdMenuLib" auch Arrays von Funktionen. Dazu erstell ich mir einen neuen Typen mit Typedef:
Code: [Select]

#ifndef TYPEDEF_FUNCPTR
#define TYPEDEF_FUNCPTR
typedef void (* FuncPtr) ();
#endif

#define  cnt_func  2

void func_1()
{
 Serial.println("func_1");
}

void func_2()
{
 Serial.println("func_2");
}

FuncPtr ary_function[cnt_func];
ary_function[0] = func_1;
ary_function[1] = func_2;

void setup()
{
 Serial.begin(9600);
}

void loop()
{
 for (uint8_t i=0; i<cnt_func; i++) {
   ary_function[i]();
 }
 delay(1000);
}
while(!success){try++;}

Go Up