Tu pregunta no está bien planteada.
¿Te refieres a crear código en tiempo de ejecución?
Lamentablemente el estándar de C++ no permite esto. Es posible que alguna extensión de Clang o similar te pueda permitir este tipo de compilación, pero yo todavía no me he encontrado con una sola situación en la que necesite hacer esto en C++. Para sacarle partido a esta funcionalidad, C++ debería tener características que ahora mismo ni se las espera.
¿Te refieres a cómo usar los condicionales?
En el caso de usar una cadena de ifs quedaría así:
Código C++:
Ver originalint valor;
std::cin >> valor;
if( valor == 0 )
func0( );
else if( valor == 1 )
func1( );
else if( valor == 2 )
// ...
Claro que también podría ser recomendable usar un switch:
Código C++:
Ver originalint valor;
std::cin >> valor;
switch( valor )
{
case 0:
func0( );
break;
case 1:
func1( );
break;
case 2:
func2( );
break;
// ...
}
¿Te refieres a hacer algo parecido a lo anterior pero sin condicionales?
Bueno, en este caso tienes, como no podía ser de otra forma, varias opciones a elegir:
- Punteros a función
Código C++:
Ver original#include <iostream>
#include <map>
void func0( )
{
std::cout << "opcion incorrecta" << std::endl;
}
void func1( )
{
std::cout << "func1" << std::endl;
}
void func2( )
{
std::cout << "func2" << std::endl;
}
void func3( )
{
std::cout << "func3" << std::endl;
}
typedef void (*ptrAFuncion)();
int main( )
{
std::map< int, ptrAFuncion > mapa;
mapa[ 0 ] = &func0;
mapa[ 1 ] = &func1;
mapa[ 2 ] = &func1;
mapa[ 3 ] = &func1;
std::cout << "Introduce una opcion: " << std::endl;
unsigned int opcion;
std::cin >> opcion;
if( opcion >= mapa.size( ) )
opcion = 0;
mapa[ opcion ]( ); // Llamamos a la función
}
- Usando std::function
Código C++:
Ver originalint main( )
{
std::map< int, std::function< void(void) > > mapa;
mapa[ 0 ] = &func0;
mapa[ 1 ] = &func1;
mapa[ 2 ] = &func2;
mapa[ 3 ] = &func3;
std::cout << "Introduce una opcion: " << std::endl;
unsigned int opcion;
std::cin >> opcion;
if( opcion >= mapa.size( ) )
opcion = 0;
mapa[ opcion ]( ); // Llamamos a la función
}
Un saludo