c 소스를 c++로 구현하는 방안에 대해서 질문드려요.
글쓴이: balgarac1 / 작성시간: 수, 2014/10/29 - 8:29오후
유저에게 명령어 입력을 받으면 명령어 처리를 하는 로직 속에서
void openConnection(char * openCmd); void nlist(char *nlistCmd); void ls(char *lsCmd); void get(char *getCmd); void put(char *putCmd); void cd(char *cdCmd); void quit(char *quitCmd); void pwd(char *pwdCmd); void bye(char *byeCmd); void help(char *helpCmd); void debugSet(char *debugCmd); typedef struct _FtpCmdHandler { char cmd[5]; void (*handler)(char * arg); char * usage; } FtpCmdHandler; FtpCmdHandler ftpCmdHandler[] = { {CMD_OPEN, openConnection, "open <IP address>\t-- connect to FTP server"}, {CMD_NLIST, nlist, "nlist\t -- name list"}, {CMD_LS, ls, "ls\t -- directory list"}, {CMD_GET, get, "get <filename>\t-- download the file"}, {CMD_PUT, put, "put <filename>\t-- upload the file"}, {CMD_PWD, pwd, "pwd\t-- print working directory"}, {CMD_CD, cd, "cd\t-- change working directory"}, {CMD_QUIT, quit, "quit\t-- close FTP session and exit"}, {CMD_BYE, bye, "bye\t-- close FTP session and exit"}, {CMD_HELP, help, "help\t-- print usage"}, {CMD_DEBUG, debugSet, "debug\t-- print debug message"} }; 이런 식으로 구조체 안에 함수 포인터를 이용해 void commandHandle(char * cmd) { int i; int cmdNum; cmdNum = sizeof(ftpCmdHandler) / sizeof(FtpCmdHandler); for (i = 0; i < cmdNum; i++) { if (!strncmp(cmd, ftpCmdHandler[i].cmd, strlen(ftpCmdHandler[i].cmd))) { (*(ftpCmdHandler[i].handler))(cmd); break; } } if (i == cmdNum) printf("?Invalid command\n"); }
입력 받은 명령어 처리를 하는데요.
c++에서 이런 로직으로 구현해보고 싶은데 어떤 방법으로 구현할 수 있을까요??
힌트좀 주세요.
Forums:
std::map을 쓰세요
std::map을 쓰세요
음..
map이면
key값은 명령어 문자열
value값은 함수 주소 값인데.. 그럼 용법을 나타내는 문자열 값은 포기해야 되나요??
commandhandler를 정의해서 value로
commandhandler를 정의해서 value로 쓰면 되죠
무슨 말인지 잘 이해가 안가요^^;;
typedef void (*cmdHandler)(void) <- value 값을 넣을 함수 포인터를 typedef로.
map cmdMap; <- map 객체 생성.
cmdMap.insert("who", this->who); <- 키 값으로 명렁어 "who" 넣고, 그에 따른 value를 함수 who를 저장하는 이런 식으로 코드가 작성되지 않나요? 용법은 어디에 들어갈 수 있죠??
void who(void)
{
..
}
map을 이용하시려면, 실제로 컴파일해보진 않았지만
map을 이용하시려면, 실제로 컴파일해보진 않았지만 대충 컨셉을 다음과 같이 이용하시면 될 것 같습니다.
댓글 달기