2012-03-25 6 views
0

이상하게도 알지만, 다음과 같은 것이 어떻게 든 생길 수 있습니까?C++ - 연산자를 char로 저장

int main (int argc, char * const argv[]) 
{ 
    const char* op1="+"; 
    int i = 10; 
    int j = 20; 
    int k = i op1 j; //compiler error, expected , or ; before op1 

    printf("k is: %i", k); 
} 
+3

번호를 사용하는 스위치 ... 쉽다. –

+1

enum과 스위치를 사용하십시오 –

+1

매크로를 사용할 수 있습니다 – relaxxx

답변

6

물론, 그것은

template <class T> 
T execute_operator(T a, string op, T b) 
{ 
    static unordered_map<string, function<T(T,T)>> operators = 
    { 
     { "+", [](T a, T b) { return a + b; } }, 
     { "-", [](T a, T b) { return a - b; } }, 
     etc 
    }; 

    return operators[op](a,b); 
}; 

int main (int argc, char * const argv[]) 
{ 
    const char* op1="+"; 
    int i = 10; 
    int j = 20; 
    int k = execute_operator(i,op1,j); 

    printf("k is: %i", k); 
} 
+0

그것은 정렬되지 않은지도처럼 보입니다. –

+0

오타, 감사 ... –

+0

그게 끝내 주셔서 고마워요. –

4

아니야.

문자열을 구문 분석 한 다음 결과에 따라 관련 코드로 전환하는 방법이 필요합니다.

int add(int x, int y) { return x+y; } 
int sub(int x, int y) { return x-y; } 
// etc. 

및 타입 정의 :

typedef int (*func)(int,int); 

다음 찾고 업의 과정을 만들 수있는 std::map<std::string,func>를 생성하고 호출

는 또한 기능의 무리를 작성하는 것이 좋습니다 관련 기능은 매우 쉽습니다.

+0

OP의 예제가 'char *'에 물건을 저장 했는데도 질문이'char'라고했습니다. 그냥 char 일 뿐이라면 아무 것도 해석 할 필요가 없으며 char 자체에'switch'를 사용할 수 있습니다. –

+0

@ MrLister : 사실입니다. –

+0

@MrLister 구문 분석을하지 않아도 맵을 갖는 것이 '스위치'보다 확장 성이 좋습니다. –

관련 문제