2017-10-25 1 views
1

매개 변수의 값에 따라 다른 클래스 개체를 반환하는 함수를 작성하고 싶습니다. 반환하는 클래스 객체는 템플릿 처리됩니다. 함수에 대한 템플릿 인수로 클래스 이름을 지정합니다.C++ 함수 반환 형식을 템플릿으로 사용

template< class T > 
static T FindClassObjects(int var){ 
    if(var==1) 
     return T<float>(var); 
    else 
     return T<int>(var); 

이 작업을 수행 할 수 있습니까?

+1

_C++에서 매개 변수에 따라 다른 유형을 반환 해 봅니다. 흠 ... [데이터에 따라 다른 데이터 유형 반환 (C++)] 가능한 복제본 (https://stackoverflow.com/questions/930932/returning-different-data-type-depending-on-the-data-c) 또는 [매개 변수에 따라 유형 반환] (https://stackoverflow.com/questions/30088983/returning-a-type-depending-on-the-parameter) –

답변

3

매개 변수의 값에 따라 다른 클래스 개체를 반환하는 함수를 작성하고 싶습니다. [...] 내가 할 수 있을까?

짧은 대답 : 아니오.

긴 답변.

C/C++ 언어는 강력한 형식입니다. 모든 단일 함수는 컴파일 유형에서 알아야하는 유형을 반환합니다.

따라서 런타임에 알려진 값에 의존하는 형식을 반환하는 기능을 갖는 것은 불가능합니다.

컴파일시에 var 값을 알고있는 경우와 다릅니다.이 경우 var 값에 따라 호출 할 함수를 선택하고 다른 형식을 반환하는 여러 함수를 개발할 수 있습니다.

어쨌든이 한계를 다른 방식으로 반올림 할 수 있습니다.

C++ 17을 사용할 수있는 경우 모든 유형을 포함 할 수있는 std::any을 반환 할 수 있습니다. 또는 (더 나은, 아마도) std::variant, 접두사가있는 형식 목록에 값을 포함 할 수 있습니다.

그렇지 않으면 다른 유형이 공통 기본 클래스를 가지고 있으면 (예를 들어) 기본 클래스에 대한 포인터를 리턴 할 수 있습니다.

+0

감사합니다. 네가 나에게 해결책을 준 것 같아. 이러한 모든 클래스에는 공통 기본 클래스가 있습니다. 그래서 나는 그것을 사용할 수있다. 하지만 문제는 기본 클래스가 템플릿이 아니라는 것입니다. 그렇다면 인스턴스화에 사용해야하는 유형을 어떻게 알 수 있습니까? – user3566905

+0

@ user3566905 - C++ 다형성의 세계에 오신 것을 환영합니다! 질문/제안 : 기본 클래스에는 파생 클래스가 어떤 유형이라고 말할 수있는 값을 포함 할 수 있습니까? – max66

관련 문제