2017-02-02 1 views
0

최근에 나는 마쥴을 쓰려고했습니다. 내 코드의 많은 부분에서 사용자 입력을 기반으로 결정해야했습니다. 인스턴스의 경우 사용자 입력 8 비트 또는 16 비트를 기반으로 버퍼 유형을 선택해야했습니다. 이 코드를 구현하고 내 일을했다 :사용자 입력에 따라 한 번만 결정하는 우아한 방법이 있습니까?

if (requestedbitsNumber == 8) 
    mxMalloc(sizeof(unsigned __int8)*NumberOfElements); 
if (requestedbitsNumber == 16) 
    mxMalloc(sizeof(unsigned __int16)*NumberOfElements); 

지금은 매크로와 다른 사람이 사용자의 입력에 따라 한 번만 결정 같은 것을 정의하는 우아한 방법이 궁금? 다음과 같이 입력하십시오 :

if (requestedbitsNumber == 8) 
    #define dataType unsigned __int8 
if (requestedbitsNumber == 16) 
    #define dataType unsigned __int16 

그리고 필요에 따라 datType을 사용하십시오. 나는 #define이 전 처리기 지시어이며 코드가 컴파일되기 전에 사용된다는 것을 알고 있습니다. 나는 그것을 의미하는 것을 보여주기 위해서만 사용했습니다. 감사.

+1

데이터 유형, 당신은 (당신이'를 sizeof로 설정 일부'size_t' 변수를 가질 수있다 "저장" 서명되지 않은 __intX)'(여기서 X는 올바른 숫자 임). 또는, 단지'mxMalloc (requestedbitsNumber/8 * NumberOfElements);'를 실행하십시오. – Cornstalks

+0

내 버퍼를 만드는 위치가 맞습니다. 하지만 특정 유형의 포인터에 무효 포인터를 캐스팅해야하는 경우는 어떨까요? 'myUin16Pointer = (unsigned __int16 *) myVoidPointer; '와 같은 것 – GntS

답변

1

template<class YourIntegerType>을 사용하십시오. 당신은 함수 나 클래스로 X를 구현할 수

if (requestedbitsNumber == 8) 
    X<unsigned __int8>(); 
if (requestedbitsNumber == 16) 
    X<unsigned __int16>(); 

:

그래서 당신은 같은 물품.


는 X 안에 뭔가를 쓸 수있는 포인터를 캐스팅하려면

대신

pointerToInteger = (YourIntegerType *) myVoidPointer;

+0

제안을 통해 특정 유형의 무효 포인터를 어떻게 캐스팅 할 수 있는지 설명해 주시겠습니까? – GntS

+0

함수에 인수를 전달하기 위해 포인터 캐스팅이 필요합니다. 'myFunction ((unsigned __int16 *) myVoidPointer)'와 같은 함수가 있다고 가정하십시오. 어떻게'X '를 사용하여 그것을 할 수 있습니까? 사소한 일이라면 유감입니다. 나는 초보자이다. – GntS

+0

@GmtK는'myFunction'을 클래스'X'의 멤버 함수로 구현합니다. – cshu

관련 문제