Ciao
Non conosco il c++, però posso darti un suggerimento su come io risolverei il problema:
Creerei un Dictionary generico con chiavi di tipo string e valori di tipo Action (un delegato che rappresenta un metodo che non accetta argomenti e non restituisce alcun valore), che corrisponderebbe al tuo array bidimensionale. In questo memorizzerei tutte le coppie (string, Action), corrispondenti a nomeMetodo, metodo; un po' come tu memorizzavi il nome del metodo e il puntatore alla funzione. A questo punto quando ricevi il comando basta ottenere il valore del dictionary mediante il nome del metodo e quindi invocare il delegato. Naturalmente ho dovuto presupporre che il metodo non richieda argomenti e non restituisca valori.
Ti scrivo un esempietto in C#, sperando che tu riesca a capirlo:
//Questo contiene tutte le coppie nomeMetodo, Metodo
Dictionary<string, Action> dict = null;
//Popola il Dictionary con il nome del comando
//e la funzione rappresentata
private void PopulateDictionary()
{
dict = new Dictionary<string, Action>();
dict.Add("Funzione1", new Action(funzione1));
dict.Add("Funzione2", new Action(funzione2));
dict.Add("Funzione3", new Action(funzione3));
dict.Add("Funzione4", new Action(funzione4));
}
//Le funzioni usate per l'esempio
private void funzione1()
{ MessageBox.Show("Chiamata la funzione 1"); }
private void funzione2()
{ MessageBox.Show("Chiamata la funzione 2"); }
private void funzione3()
{ MessageBox.Show("Chiamata la funzione 3"); }
private void funzione4()
{ MessageBox.Show("Chiamata la funzione 4"); }
//Questa funzione la chiami quando ricevi un comando
//Passando come parametro il nome del comando
void OnCommandRecived(string command)
{
//Se il dictionary è null...
if (dict == null)
{
//... lo popoli
PopulateDictionary();
}
try
{
dict[command].Invoke();
}
catch (KeyNotFoundException )
{
MessageBox.Show("Comando non valido");
}
}
Luca