2010-01-22 2 views
0
을 처리하는 유형의 유형을 저장

가의 라인을 따라 뭔가 할 수 있나요 : 상대적으로 사소한 방법으로변수 인수 목록

type t = int;//this would be a function which identifies what type the next argument is 
if(t == int) 
    printf("%d", va_arg(theva_list, t)); 

를? 유형을 보유 할 수있는 유일한 객체는 type_info이며이 방법으로이를 사용하는 방법을 찾을 수 없습니다.

감사합니다, 패트릭

+1

런타임시 유형을 알아야 할 경우 일반적으로 설계에 문제가 있습니다. 해결하려는 문제에 대한 더 나은 설명이 도움이 될 수 있습니다. –

답변

5

일반적으로, 아니. 유형은 실제로 컴파일 할 때만 저장되고 조작 될 수 있습니다. 런타임에 무언가를 원한다면 유형을 일종의 값 (예 : 열거 형)으로 변환해야합니다 (보통 털이 메타 프로그래밍을 통해).

여기에서 실제로 달성하려는 내용에 대해 다소 높은 수준의 설명을 주면 아마도 더 좋을 것입니다. "switch on type"시도에서 다양한 인수 목록을 조합하면 기차 충돌과 같은 소리가납니다. 일어날 일이 ...

+0

일부 형식 기반 처리를 허용하는 RTTI가 있다는 것을 잊지 마십시오. – Skizz

+0

이렇게 생각했습니다. 내가 당혹 스럽기 때문에 실제로 그것을 설명하고 싶지는 않습니다. 생각이 떠오르지 만 가능했다면 시간이 절약되었을 것입니다. 감사 – Patrick

1

그런 식으로 생각할 수도 있습니다. "int"와 같은 유형은 컴파일 유형에서 평가됩니다. 런타임에 유형을 평가하려고합니다.

아마도 "t"참조를 함수 또는 가상 함수가있는 클래스의 인스턴스 (각 유형마다 하나씩)로 만들고 싶을 것입니다. 기본적으로 명령 패턴이 필요합니다. 명령은 "형식 값"이고 명령의 다른 인스턴스는 형식을 지정할 수있는 여러 유형과 일치합니다.

1

사용 전문화 :

void smart_print(int t) 
    { 
    printf("%d", i); 
    } 
    void smart_print(double f) 
    { 
    printf("%g", f); 
    } 

그러나 템플릿의 도움으로 당신은 또한 예상 함수에 포인터 해결되므로 유형의 식별자로 포인터를 취급하고 당신은 어떻게 봐야 결과

0

에게 원하는 얻을 것이다 수와 <<>> 연산자는 스트림 클래스 (예 : cout 및 cin)에서 작동합니다. 아마도 그것은 문제를 해결하는 방법, 즉 과부하 된 기능에 대한 아이디어를 줄 것입니다.