Appena ho letto il testo ho subito pensato a std::map, e' la soluzione piu' flessibile, non solo perche' puoi cambiare la lista agilmente a runtime, ma perche' puoi inizializzarla in modo comprensibile come variabile globale:
Puoi mettere la mappa come static o come const (e con chiave come int o come food), dipende se hai intenzione di modificarla a runtime.
In base a questo dalla tua funzione puoi o tornare una const char* (se anche la mappa e' const) se no o cloni la stringa e la ritorni in una std::string o la setti con memcpy come nel tuo esempio.
C++:
static std::map<int, std::string> Products = {
{ 1, "Hamburger" },
{ 2, "Chips" }
};
// Variante con mappa constante + enum
enum class food
{
hamburger = 1,
chips = 2
};
const std::map<food, std::string> Products = {
{ food::hamburger, "Hamburger" },
{ food::chips, "Chips" }
};
Puoi mettere la mappa come static o come const (e con chiave come int o come food), dipende se hai intenzione di modificarla a runtime.
In base a questo dalla tua funzione puoi o tornare una const char* (se anche la mappa e' const) se no o cloni la stringa e la ritorni in una std::string o la setti con memcpy come nel tuo esempio.