C++에서 런타임 정보로 유형을 판별 할 수 있는지 궁금합니다.C++에 대한 런타임 판별 유형
(1) 내 질문은 매우 일반적이지만, 단순, 나는 간단한 예제부터 시작됩니다 :
의 (a) "는 argv : 두 가지 질문이이 예를 들어
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
}
cout << t << endl; // error: ‘t’ was not declared in this scope
return 0;
}
[1]에서 t "까지 잘못되었지만 C 문자열의 유형 정보 argv [1]을 실제 유형 키워드로 변환 할 수 있습니까? 따라서 우리는 if-else 절과 strcmp로 모든 유형을 검사 할 필요가 없습니다.
(b) if 절의 로컬 범위 내에서 정의 된 변수 t를 외부에서 여전히 유효하게 만드는 방법. 로컬 변수를 범위 외부로 "내보내는"방법은 무엇입니까?
(2) 일반적으로 위의 간단한 예제와 관련이 없지만 런타임에서 유형을 결정하는 일반적인 방법은 무엇입니까? 어떤 방법이있을 수 있습니다.
(a) 하나의 유형에서 정의 된 변수의 처리를 동일한 범위 안에 정의 할 수 있습니다. 예 :
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
cout << t << endl;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
cout << t << endl;
}
return 0;
}
아마도 템플릿 함수를 사용하여 다양한 유형의 공통 코드를 재사용 할 수 있습니다.
(b) 또는 추상 클래스 유형 및 다형성을 사용하여 정의를 간접적으로 내보낼 수는 있지만 정확히 어떻게 전달되는지는 확실하지 않습니다.
귀하의 조언에 감사드립니다.
+1 다형성 해결책을 게시하려고했습니다. boost.variant를 사용하면 모든 작업의 유형을 확인해야하기 때문에 boost.variant보다 훨씬 의미가 있습니다. –