¸â¹ö ÇÔ¼ö Æ÷ÀÎÅÍ4

4Àå¿¡¼­ ³»°¡ ÇÊ¿äÇÑ °ÍÀ» ±¸ÇöÇÏ°Ô µÇ¾ú´Ù.

C#ÀÇ Deleage³ª BoostÀÇ bind¸¦ ¿Ïº®ÇÏ°Ô ±¸Çö Çϸé ÁÁÁö¸¸, ³ª¿¡°Ô ÇÊ¿äÇÑ°Ç ¾îµð±îÁö³ª, ¹®ÀÚ¿­À»
¹Þ¾Æ¼­ ƯÁ¤ °´Ã¼ÀÇ ¸Þ½îµå¸¦ ½ÇÇุ ÇØÁÖ¸é µÇ¹Ç·Î ´õ ÀÌ»óÀÇ º¹ÀâÇÑ ÄÚµå´Â ÇÊ¿ä ÇÏÁö ¾Ê´Ù.

member_function_pointer1.html

member_function_pointer2.html

member_function_pointer3.html

CmdTable4.zip

À̹ø ÀåÀº À§ÀÇ ÀåµéÀ» Âü°í·Î ÇÑ ¼³¸íÀÌ´Ù.

±×·¯¹Ç·Î °£´ÜÇÏ°Ô »ç¿ë ¹æ¹ý¸¸ ¼³¸íÇÏ°Ú´Ù.

¸í·É¾î Ãß°¡

MakeCmd¸¦ ÅëÇÏ¿© ¹®ÀÚ¿­°ú ¸â¹öÇÔ¼ö¸¦ ³Ñ°ÜÁÖ¸é Add()¿¡¼­ cmdTable¿¡ Ãß°¡ÇÑ´Ù.
¸â¹ö ÇÔ¼ö¸¦ ¾î¶»°Ô ä¿ï °ÍÀΰ¡? ÀÌ°ÍÀº µÚ¿¡ ½ÇÁ¦ »ç¿ë¹ý¿¡¼­ ¼³¸íÇÑ´Ù.

typedef std::pair<const char*, IFunctionImp*>            MakeCmd;

typedef std::map<const char*, IFunctionImp*, StriLess >  CmdMap;

 

//CmdMap cmdTable

void Command::Add( const char* strCmd, IFunctionImp* imp)

{

    cmdTable.insert( MakeCmd( strCmd, imp ) );

}

¸í·É¾î ½ÇÇà

IFunctionImpÀÇ Process()¸¦ ½ÇÇàÇÑ´Ù.  »ç¿ë¸¸ ÇÑ´Ù¸é ³»ºÎ¿¡ ¾î¶»°Ô ½ÇÇàµÇ´ÂÁö ¸ð¸£´õ¶óµµ Å©°Ô ¹®Á¦ ¾ø´Ù.

void Command::Process( char* str )

{

    CmdMap::iterator iter = cmdTable.find( str );

    if( iter != cmdTable.end() )

    {

        (iter->second)->Process();

    }

}

½ÇÁ¦ »ç¿ë¹ý

#define MakeFunc( a, b, c )   new FunctionImp<b>( &a, &b::c)

 

void main()

{

    Command command;

 

    Lion lion;

    command.Add( "Run", new FunctionImp<Lion>(&lion, &Lion::Run) );

    Tiger tiger;

    command.Add( "Idle", new FunctionImp<Tiger>(&tiger, &Tiger::Idle) );

 

    command.Add( "Attack", MakeFunc( lion, Lion, Attack ) );

 

    command.Process( "Run" );

    command.Process( "Idle" );

    command.Process( "Attack" );

}

 

command.Add( "Run", new FunctionImp<Lion>(&lion, &Lion::Run) )

 

"Run"Àº ¸í·ÉÀ» È£Ãâ ÇÒ ¶§ ÇÊ¿äÇÑ ¹®ÀÚ¿­ÀÌ´Ù.
FunctionImpÀÇ ÅÛÇø®Æ®´Â Lion, »ý¼ºÀÚ Ã¹ ¹ø° ÀÎÀÚ´Â °´Ã¼(lion), µÎ ¹ø° ÀÎÀÚ´Â ½ÇÇàÇÒ ¸Þ½îµåÀÌ´Ù.

MakeFunc µðÆÄÀι®¿¡ ÀÇÇؼ­  ´ÙÀ½°ú °°ÀÌ Ãß°¡ ÇÒ ¼öµµ ÀÖ´Ù.

 

command.Add( "Attack", MakeFunc( lion, Lion, Attack ) )

 

À̰͵µ º°·Î º¸±â¿£ ÁÁÁö°¡ ¾Ê´Ù. ±×³É µðÆÄÀι® ¾øÀÌ »ç¿ëÇÏ´Â°Ô ÁÁ°Ú´Ù.

¿©±â¼­ ÇÑ°¡Áö È®ÀåÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

FunctionImp¿¡ Ãß°¡ ÇÒ ¼ö ÀÖ´Â ¸Þ½îµå°¡ void Run()ÀÇ ¸Þ½îµåó·³ ¸®ÅÏ°ª°ú ÀÎÀÚ°¡ voidÇü¸¸
»ç¿ëÇØ¾ß ÇÏ´Â Á¦¾àÀÌ ÀÖ´Ù.

 

¿À´ÃÀº ÇÇ°ïÇؼ­ ¿©±â ±îÁö¸¸.....