비슷한 함수를 하나로 할 수 있는 방법은 없을까요?
글쓴이: youngminny / 작성시간: 목, 2005/09/22 - 10:54오전
좀 황당한 질문일지 모르겠지만, 아래와 같은 제어구문이 100여개가 있습니다. 소스랑이 무척 길죠
if (key.find("TYPE1", 0) != string::npos) { strcpy(pTag->TYPE1, val.c_str()); } else if (key.find("NEWR", 0) != string::npos) { strcpy(pTag->NEWR, val.c_str()); } ...이런식으로 무지 많습니다.
그래서 생각한 것이...
TYPE1, NEWR 등을 저장하고 for 구문을 써서 한 함수로 처리할 수 있는 방법이 없을까?? 생각중입니다.
혹시 가능한 방법이 있을런지요?
좀 황당하긴해도 방법이 있을것 같은데... 영 머리가 안도네요..
Forums:
당연히 그렇게 하셔야하는거 아닌가요...최소한 switch 문은 쓰셔
당연히 그렇게 하셔야하는거 아닌가요...
최소한 switch 문은 쓰셔야죠..
----------------------------------------------------------------------------
라인수가 걱정이라면#define 을 사용하는건 어떨까요?TYPE1
라인수가 걱정이라면
#define 을 사용하는건 어떨까요?
TYPE1과 NEWR만 바뀌니 쉽게 할거 같은데요.
요즘 define에 재미붙이고 있어서 함 적어보네요. :oops:
[quote="헤즈"]라인수가 걱정이라면#define 을 사용하는건
좋은 코드네요.. 단순히 코드줄을 간단히 하는 거로는 참 좋군요.
와 같이 했습니다.약간 수정해서 저는
호출은,
이라고 했네요... 감사요..
혹시 key 값이 항상 "TYPE1", "NEWR" 이렇게 정해진 값으로
혹시 key 값이 항상 "TYPE1", "NEWR" 이렇게 정해진 값으로 정확하게 끝나고..
(key 값이 "abTYPE1", " xxxTYPE1" 이런 경우는 없는 건가요?)
거기에 대해 pTag->(key string value) field 에다가 val 을 스트링 카피 하시는 건가요?
만일 그러시다면,
key string 과 그에 해당하는 pTag->(key string value) 의 주소를 hash table 로 만드시고
(table 에 없는 key 가 입력이 되면 null pointer 반환하도록)
나중에 key value 로 hashing 해서 나오는 주소 값이 null 이 아니라면,
바로 그 주소에다가 val 에 저장된 스트링을 strcpy 하시는 것은 어떠신가요?
혹 자주 실행 되는 함수라면,
불필요한 if 문 안에서의 statement evaluation 시간을 줄여 줄 수 있을 것 같은데요.
혹시나 저런 경우가 아니라면, 그냥 무시해 주십시요-_-;
다들 자기 이야기 밖에 할 줄 모르는 세상에서,
메아리 같은 사람 하나 필요할 거 같아서...
pointer-to-member에 대한 테이블을 쓰는 방법도 있습니다.
pointer-to-member에 대한 테이블을 쓰는 방법도 있습니다.
pTag 으로 참조 되는 개체가 가변적이라면..(거의 그럴 것 같지만
pTag 으로 참조 되는 개체가 가변적이라면..
(거의 그럴 것 같지만..)
각각의 field 의 offset 을 hash table 에 저장한 후 key 값에 따라 pTag 의 base address 에서 구해진 offset 값을 적용해서
원하시는 field 에다가 string copy 를 하셔야 할 거 같군요.
이렇게 되면 너무 C 에 가까운 구현이 되는 듯 한데.
다른 분들의 의견은 어떠신지요?
그리고, doldori 님께 유용한 거 하나 배웠네요.. 감사합니다.
다들 자기 이야기 밖에 할 줄 모르는 세상에서,
메아리 같은 사람 하나 필요할 거 같아서...
댓글 달기