Ultima modifica:
Salve, come dal titolo volevo sapere quali sono alcuni dei metodi migliori per strutturare una funzione in modo che possa ritornare più di una stringa, la funzione in questione dovrebbe ricevere come parametro un valore di tipo intero che possa essere associato a delle stringhe, ne ho scritta una molto basilare:
l'output mostrato su console è il seguente:
Dopo averla finita di scrivere mi sono venute altre idee in mente, tra cui:
1) Definire una classe contenete delle stringhe o dei puntatori su di esse ed usarla come valore di ritorno, ma il suo concepimento ed impiego sarebbe risultato al quanto forzato dato che verrebbe utilizzata solo come valore di ritorno di quell'apposita funzione.
2) Dichiarare delle variabili globali di tipo stringa e strutturare la funzione in modo che il suo valore di ritorno sia un vettore di puntatori sulle corrispettive, oppure dichiarale come statiche costanti all'interno della funzione ma non ho idea se possa essere ritenuto come un qualcosa di fatto bene.
3) Nel caso i valori interi associabili a delle stringhe siano pochi si potrebbero definire delle mappe di questo tipo
Dunque mi piacerebbe conoscere i vostri pareri sull'argomento.
C++:
#include <iostream>
enum food
{
hamburger = 1,
chips = 2
};
enum drinks
{
water = 4,
soda = 8
};
// Essendo una versione semplificata è voluta la mancanza dei controlli sulle dimensioni del buffer
// d'altronde si prospetta che quest'ultimo sia sufficientemente capiente
bool GetOrderAsString(int Order, char* IpBuffer)
{
int streamPos = 0;
std::string product;
bool write = true;
// Ottieni l'oggetto di tipo "food"
switch (Order & 0x03)
{
case hamburger:
product = "hamburger";
break;
case chips:
product = "chips";
break;
}
// Scrivi l'ordinazione nel buffer
streamPos = product.length();
memcpy(IpBuffer, product.data(), product.length());
// Ottieni l'oggetto di tipo "drink", potrebbe anche non essere preso
switch (Order & 0x0C)
{
case water:
product = "water";
break;
case soda:
product = "soda";
break;
default:
write = false;
break;
}
if (write)
{
// Aggiungi un carattere separatore
IpBuffer[streamPos++] = '|';
// Scrivi la seconda ordinazione nel buffer
memcpy(IpBuffer + streamPos, product.data(), product.length());
}
return true;
}
int main()
{
int Order_1 = hamburger;
int Order_2 = chips | water;
char buffer_1[32] = { 0 };
char buffer_2[32] = { 0 };
// Converti gli ordini nelle variabili "int" nelle corrispettive stringhe
GetOrderAsString(Order_1, buffer_1);
GetOrderAsString(Order_2, buffer_2);
std::cout << "Order_1: " << buffer_1 << std::endl << "Order_2: " << buffer_2;
getchar();
return 0;
}
Codice:
Order_1: hamburger
Order_2: chips|water
1) Definire una classe contenete delle stringhe o dei puntatori su di esse ed usarla come valore di ritorno, ma il suo concepimento ed impiego sarebbe risultato al quanto forzato dato che verrebbe utilizzata solo come valore di ritorno di quell'apposita funzione.
2) Dichiarare delle variabili globali di tipo stringa e strutturare la funzione in modo che il suo valore di ritorno sia un vettore di puntatori sulle corrispettive, oppure dichiarale come statiche costanti all'interno della funzione ma non ho idea se possa essere ritenuto come un qualcosa di fatto bene.
3) Nel caso i valori interi associabili a delle stringhe siano pochi si potrebbero definire delle mappe di questo tipo
std::map<int, char*>
ed associare a ogni valore di int
tutte le corrispettive stringhe in una sola char*
, ad ogni modo risulterebbe simile alla soluzione numero 2.Dunque mi piacerebbe conoscere i vostri pareri sull'argomento.