//g++ -o funcEntry funcEntry.hpp funcEntry.cpp
#include <iostream>
#include <string>
#include <map>
#ifndef FUNCENTRY_HPP__
#define FUNCENTRY_HPP__
enum LEVEL_TYPE
{
LEVEL_SYSTEM = 0 ,
LEVEL_PROGRAMMER ,
LEVEL_ORDINARY
} ;
typedef int (*funcEntryPoint) ( char *) ;
//define the pointer function ,we also name it the entry address of function
funcEntryPoint getFuncEntryPointByType ( LEVEL_TYPE type );
//we send different enum type value ,and get target function entry
int systemLevelEntryPoint ( char * ) ;
//send LEVEL_SYSTEM ,get systemLevelEntryPoint function entry
int programmerLevelEntryPoint ( char * ) ;
//send LEVEL_PROGRAMMER ,get programmerLevelEntryPoint pointer function
int ordinaryLevelEntryPoint ( char * ) ;
//after getting function entry point , we can regard it as the function itself
#endif
#include "funcEntry.hpp"
using namespace std ;
funcEntryPoint getFuncEntryPointByType ( LEVEL_TYPE type )
{
switch ( type )
{
case LEVEL_SYSTEM :
return systemLevelEntryPoint ;
case LEVEL_PROGRAMMER :
return programmerLevelEntryPoint ;
case LEVEL_ORDINARY:
return ordinaryLevelEntryPoint ;
default :
cout<<"error type " ;
return NULL ;
}
}
int systemLevelEntryPoint ( char * line )
{
cout<<" system "<<endl ;
cout<<line<<endl ;
return 0 ;
}
int programmerLevelEntryPoint ( char *line )
{
cout<<"programmer"<<endl ;
cout<<line<<endl ;
return 0 ;
}
int ordinaryLevelEntryPoint ( char *line )
{
cout<<"ordinary"<<endl ;
cout<<line<<endl ;
return 0 ;
}
int main ( int argc , char * argv[] )
{
funcEntryPoint entryFunc ;
entryFunc = getFuncEntryPointByType ( LEVEL_SYSTEM) ;
//we get systemLevelEntryPoint function entry
entryFunc("i am system level function !") ;
//we use function entry just like use the method itself
entryFunc = getFuncEntryPointByType ( LEVEL_PROGRAMMER ) ;
entryFunc("i am programmer level function !") ;
entryFunc = getFuncEntryPointByType ( LEVEL_ORDINARY ) ;
entryFunc("i am ordinary user level function !") ;
return 0 ;
}
in the next section , we will implement a more complex function entry point test ,
on base of this
//coding me