在我看来,最简单的方法是使用std::map<std::string, std::function<...> >
然后从您的函数创建一个全局地图并在地图上查找:
typedef std::function<void()> my_function;
typedef std::map<std::string, my_function> functions_map;
void test1() {...}
void test2() {...}
void test3() {...}
#ifndef _countof
# define _countof(array) ( sizeof(array) / sizeof(array[0]) )
std::pair<std::string, my_function> pFunctions[] = {
std::make_pair( "test1", my_function(&test1) ),
std::make_pair( "test2", my_function(&test2) ),
std::make_pair( "test3", my_function(&test3) )
};
functions_map mapFunctions( pFunctions, pFunctions + _countof(pFunctions) );
void main() {
std::string fn;
while( std::cin >> fn ) {
auto i = mapFunctions.find( fn );
if( i != mapFunctions.end() )
i->second();
else
std::cout << "Invalid function name" << std::endl;
}
}