Основное решение, согласно моей ссылке в комментарии к вопросу, состоит в том, чтобы сопоставить строку с каким-либо вызовом функции.
Чтобы зарегистрировать строку -> пара указатель функции / функтор:
Во-первых, у вас есть объект-диспетчер (шок! Ужас!).
Давайте назовем это TheDispatcher - это обертка для map<string,Func>
, где
Func - это указатель вашей функции или тип функтора.
Затем зарегистрируйте класс:
struct Register {
Register( comst string & s, Func f ) {
TheDispatcher.Add( s, f );
}
};
Теперь в ваших отдельных единицах компиляции вы создаете
статические объекты (шок! ужас!):
Register r1_( "hello", DoSayHello );
Эти объекты будут созданы (при условии, что код не находится в статической библиотеке) и будут автоматически зарегистрированы в TheDispatcher.
А во время выполнения вы просматриваете строки в TheDispatcher и выполняете связанную функцию / функтор.