2016-10-13 7 views
0

을 만들어 다음과 같은 상황이 : 나는 이런 식으로 뭔가하고 싶은C++ 동적 유형

:

if(variant==1){ 
    #define my_type int; 
} 
else{ 
    #define my_type double; 
} 
cout<<sizeof(my_type); 

을 누른 후 내 함수가 다른 유형을 생성해야합니다 몇 가지 매개 변수에 따라 내 코드에서 my_type.

따라서, 그 변형 인 경우 = 1 sizeof(my_type) 4를 제공하고 변이체 = 2는

8. 어떻게 행해질 수 제공? 이런 방식 으로든 다른 방식 으로든.

감사합니다.

+1

'# define'은 컴파일 타임에 작동하지만'if'는 런타임에 작동하기 때문에 여러분의 제안대로 작동하지 않을 수 있습니다. 문제에 대해 알지 못하면 무엇을해야하는지 제안하기가 어렵습니다. 당신이 달성하고자하는 것의 더 큰 그림을 우리에게 말할 수 있습니까? –

+0

그건 전처리 지시어가 작동하는 방식이 아닙니다. –

답변

0

@Magnus Hoff에 동의합니다. 요청한 사항을 수행 할 수 없습니다. 그러나 두 가지 근사가 있습니다.

옵션 1 : 변형 매크로를 만듭니다.

#ifdef variant 
# define my_type int 
#else 
# define my_type double 
#endif 

옵션 2 : 템플릿 기능을 사용하십시오. 대신

void func(int variant) { 
    if (variant==1) 
    #define my_type int 
    else 
    #define my_type double 
    my_type ... 
} 

이 작업을 수행 :

template<typename my_type> void func() { 
    my_type ... 
}   
+0

해당 질문으로 업데이트했습니다. 나는 위의 두 가지 모두 내게 맞지 않을 것이다. – mbaros

+0

템플릿 솔루션은 업데이트 된 질문과 함께 작동해야합니다. 함수 본문에서 size_of (my_type)를 사용할 수 있습니다. –

0

이 교체 :

if(variant==1){ 
    #define my_type int; 
} 
else{ 
    #define my_type double; 
} 
cout<<sizeof(my_type); 

중 & hellip을; 이것과 함께 :

template< class Type > 
void foo() 
{ 
    // ... 
    cout<<sizeof(Type); 
} 

// ... 
if(variant==1) 
{ 
    foo<int>(); 
} 
else 
{ 
    foo<double>(); 
} 

런타임 값은 컴파일 타임 결정에 영향을 미치지 않습니다. 시간 여행 장치없이.