Variable mit Kommando verbinden

Hallo, ich benutze im TFT_eSpi den Sprite-Befehl:

z.b. Icon04DBSprite.pushImage(0, 0, 101, 61, Icon04DB);
Icon04DBSprite.pushSprite(x + 10, y, TFT_BLACK);

Es funktioniert auch auf diese Weise gut.

Nun habe ich 10 Icons, die ich alle durchnummeriert habe. Aber schreibfaul wie ich bin möchte ich nur eine Funktion im Programm nutzen.
Die Variable habe ich schon zusammengebaut.
Der IconName wird mir als String in der Funktion übergeben. Hier z.B. "04d":
<code

char iname[3];
char icon[8];

  IconName.substring(0, 2).toCharArray(iname, IconName.length());

  strcpy(icon, "Icon");
  strcat(icon, iname);
  strcat(icon, "DB");

Ausgabe  Variable = "Icon04DB"

Wie kann ich z.B. jetzt den Befehl (Variable)+Sprite.pushImage... erzeugen.

Für eine Hilfe wäre ich dankbar.

  1. C++ kennt keine Befehle nur Funktionen, bedingte Anweisungen, Schleifen Methoden, Operatoren usw.
  2. Man kann in C++ keine Bezeichner dynamisch generieren. In PHP würde das gehen.

Meist besser als durchnummerieren: Verwende Arrays

mach bitte einen vollständigen Sketch
icon[8] ist außerdem zu kurz für ein 8stelligen c-string. Da fehlt eine Stelle für den Nullterminator.
Es bleibt ein c-string.
Zugriff auf eine "Variable" hast du damit nicht.
Auch nicht auf die Instanz einer Klasse.
Wie schon gesagt. Leg deine Instanzen als Array an und nimm den Array-Index.

iconblablub[4].pushSprite(x + 10, y, TFT_BLACK);

Ich denke folgendes wäre ein Weg um die Geschichte in Funktionen oder auch in Schleifen abzuarbeiten, ohne den eigentlichen Code viel duplizieren zu müssen.

struct Sprite {
  TFT_eSprite object;
  const int32_t Xpos;
  const int32_t Ypos;
  const int32_t Width;
  const int32_t Hight;
  const uint16_t* Image;
};


Sprite Sprites[] {
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon01Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon02Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon03Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon04Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon05Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon06Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon07Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon08Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon09Db},
    {TFT_eSprite(&tft), 0, 0, 101, 61, Icon10Db}
};

void spritePushImage(Sprite& Sp) { 
  Sp.object.pushImage(Sp.Xpos, Sp.Ypos, Sp.Width, Sp.Hight, Sp.Image); 
}

void setup() {
  [...]
}

void loop {
  [...]
  for (auto& S : Sprites) {
    // spritePushImage(S);   // per Funktion oder direkt 
    S.object.pushImage(S.Xpos, S.Ypos, S.Width, S.Hight, S.Image);
    S.object.pushSprite(x + 10, y, TFT_BLACK);
  }
  [...]
}

Danke für die Antworten. Ich werde letzteres mal ausprobieren. Ich bin aber gestern an die Speichergrenzen meines ESP32 gekommen und muss das Ganze nochmal überdenken. Ich überlege, die Icons direkt von der SD-Karte zu lesen. Ich bastle gerade an einer Wetterstation, die u.a. auch die Mondphasen anzeigen sollen. Diese Icons habe ich noch garnicht eingebaut. Ich habe mich im Netzt umgesehen und es gibt bereits viele Lösungen. Ich wollte aus allen Lösungen ein eigenes Gemisch bauen. Besten Dank für die Hilfen.