Dichiarazioni variabili di tipo variant

Buon pomeriggio,
Mi trovo ad aver bisogno di utilizzare per una funzione una variabile della quale non conosco il tipo. Potrebbe essere quindi un int, char, long, String, ect....
La mia domanda ora è: esiste per Arduino un tito di variabile "Variant"?

Ringrazio in anticipo

Alan Masutti

Ti dico subito che probabilmente sbagli approccio, perché le variabili "variant" sono presenti solo in pochi linguaggi, se fossero veramente necessarie sarebbero presenti in tutti i linguaggi.
Dovresti dire cosa devi fare cosi forse ti si propone una soluzione. In C esistono le union, ma probabilmente non ti servono.

Uhmm... Una funzione che accetta in ingresso numeri interi, in virgola mobile e testo?... Strana funzione! Forse devi cambiare qualcosa... :slight_smile:
Se no, usa un tipo per ogni variabile.

Se non ne conosci il tipo come fai ad usarla?

Grazie delle risposte,
la mia è una funzione che deve concatenare delle variabili e scrivere il valore sulla seriale,
i due valori sono uno String e un "Var" che potrebbe essere un numero o altro; la domanda nasce per generalizzare i casi ed utilizzare la medesima funzione per tutti i casi in cui ho bisogno di farlo senza andare ad analizzare il tipo della variabile da concatenare.

Alan Masutti

Le possibilità sono due, direi:

  1. Usi un tipo di variabile per ogni tipo di dato che deve entrare o uscire
  2. Trasformi tutto in un tipo solo di variabile. Così, genericamente, però, è impossibile dire di più.
    Inoltre, String è bene evitarlo perché porta problemi appena il programma si complica un po'. Bisogna usare char. Anch'io devo approfondire sull'uso. In un programmino mi hanno aiutato a risolvere il problema, perché oltre certe dimensioni non funzionava proprio più. Eppure doveva solo estrarre dei nomi a caso da una lista. Devo studiare, però...

Grazie per la risposta,
ma ho preferito non continuare su questa strada e cambiare metodo.

Se posso ora in tema di tipi di variabili avrei un'altra domanda: convertire char in int??

Alan Masutti

  1. Usare l'overloading (dovrebbe essere gestito nel linguaggio di arguino o sbaglio?)
    Dichiari il metodo varie volte con i parametri di tipo diverso e all'interno converti il tipo in quello che ti comoda di più e richiami metodo con quel tipo.
    Sono di fretta, poi spiego meglio se serve.

Ciao

Prova a cercare su san google "Arduino templare".

Se ci spiegassi a che cosa ti serve Ciao potremmo aiutarti maggiormente in quanto le 2 domande che al momento ci stai facendo mi risultano di difficile comprensione.
Per la prima in quanto una funzione che scrive una variabile di qualunque tipo su seriale esiste già ed è la Serial.print(). Un insieme di tali funzioni con catena le variabili su seriale, Ovvero le mostra tutte le una di fila all'altra, E tale funzione può anche essere usata per scrivere testo. Non conosco altri significati di concatenare le variabili, e qualora ti servisse ti servirebbe anche una funzione con un numero imprecisato di parametri, cosa che non è possibile avere.

Per la seconda in quanto per cambiare una chat in un int vi sono due modi semplici: fare il casting manuale

tipo1 nomevariabile;
...
(tipo2) nomevariabile// in questo punto soltanto la variabile è considerata di tipo 2

E creare un intero assegnandogli come valore quello della char

char a;
int b;
...
b=a;// adesso a resta del tipo che è ma B ha assunto il valore di a ovvero e logicamente la stessa cosa usare a o usare B

Vi è però un problema nel l'operazione in sé, ovvero che spesso il tipo char, dall'inglese carattere, è utilizzato per contenere il codice di un carattere ed è l'unico tipo che può farlo. Di conseguenza scrivere una chat o scrive un intero mediante Print non è la stessa cosa se può possono avere uguale valore, ed il valore di una chat potrebbe non essere interessante come numero ( se io leggo il carattere Zero Voglio sapere che ho letto il carattere Zero non gliela char vale 65 o un altro valore, non mi ricordo '0')

Per il passaggio di un numero non definito di variabili ad una funzione si può usare la "vararg"...