#include <iostream>
#include <map>
#include <string>
#include <sstream>
typedef void (*FooPointer) ( ) ;
std :: map < std :: string , FooPointer > fooCollection ;
void foo1 ( ) {
std :: cout << "Call foo1 ( )" << std ::endl ;
}
void foo2 ( ) {
std :: cout << "Call foo2 ( )" << std ::endl ;
}
int main() {
//Добавляем указатели на функции в контейнер
fooCollection [ "foo1" ] = foo1 ;
fooCollection [ "foo2" ] = foo2 ;
size_t num ;
std :: cout << "Enter number" << std :: endl ;
std :: cin >> num ;
//Формируем имя
std :: ostringstream ss ;
ss << "foo" ;
ss << num ;
//Вызываем функцию, если она найдена.
std :: map < std :: string , FooPointer > :: iterator it = fooCollection.find ( ss.str ( ) ) ; //Ищем функцию по имени
if ( it != fooCollection.end ( ) )
(*it).second ( ) ; //Вызываем функцию по указателю
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KCnR5cGVkZWYgdm9pZCAoKkZvb1BvaW50ZXIpICggKSA7CnN0ZCA6OiBtYXAgPCBzdGQgOjogc3RyaW5nICwgRm9vUG9pbnRlciA+IGZvb0NvbGxlY3Rpb24gOwoKCnZvaWQgZm9vMSAoICkgewoJc3RkIDo6IGNvdXQgPDwgIkNhbGwgZm9vMSAoICkiIDw8IHN0ZCA6OmVuZGwgOwp9Cgp2b2lkIGZvbzIgKCApIHsKCXN0ZCA6OiBjb3V0IDw8ICJDYWxsIGZvbzIgKCApIiA8PCBzdGQgOjplbmRsIDsKfQoKCmludCBtYWluKCkgewoJLy/QlNC+0LHQsNCy0LvRj9C10Lwg0YPQutCw0LfQsNGC0LXQu9C4INC90LAg0YTRg9C90LrRhtC40Lgg0LIg0LrQvtC90YLQtdC50L3QtdGACglmb29Db2xsZWN0aW9uIFsgImZvbzEiIF0gPSBmb28xIDsKCWZvb0NvbGxlY3Rpb24gWyAiZm9vMiIgXSA9IGZvbzIgOwoJCglzaXplX3QgbnVtIDsKCXN0ZCA6OiBjb3V0IDw8ICJFbnRlciBudW1iZXIiIDw8IHN0ZCA6OiBlbmRsIDsKCXN0ZCA6OiBjaW4gPj4gbnVtIDsKCQoJLy/QpNC+0YDQvNC40YDRg9C10Lwg0LjQvNGPCglzdGQgOjogb3N0cmluZ3N0cmVhbSBzcyA7CglzcyA8PCAiZm9vIiA7CglzcyA8PCBudW0gOwoJCgkvL9CS0YvQt9GL0LLQsNC10Lwg0YTRg9C90LrRhtC40Y4sINC10YHQu9C4INC+0L3QsCDQvdCw0LnQtNC10L3QsC4KCXN0ZCA6OiBtYXAgPCBzdGQgOjogc3RyaW5nICwgRm9vUG9pbnRlciA+IDo6IGl0ZXJhdG9yIGl0ID0gZm9vQ29sbGVjdGlvbi5maW5kICggc3Muc3RyICggKSApIDsgLy/QmNGJ0LXQvCDRhNGD0L3QutGG0LjRjiDQv9C+INC40LzQtdC90LgKCWlmICggaXQgIT0gZm9vQ29sbGVjdGlvbi5lbmQgKCApICkKCQkoKml0KS5zZWNvbmQgKCApIDsgLy/QktGL0LfRi9Cy0LDQtdC8INGE0YPQvdC60YbQuNGOINC/0L4g0YPQutCw0LfQsNGC0LXQu9GOCn0=