문제

나는있다 char (예 : 바이트) 네트워크를 통해 전송하는 버퍼. 앞으로 어느 시점에서 나는 버퍼를 다른 유형과 같은 다른 유형으로 전환하고 싶을 것입니다. unsigned char 또는 short. 나는 다음과 같은 일을 생각하고 있습니다.

typedef char bufferElementType;

그리고 버퍼 요소로 무엇이든 할 때마다 나는 그것을 다음과 같이 선언합니다. bufferElementType 보다는 char. 그렇게하면이 typedef를 변경하여 다른 유형으로 전환 할 수 있습니다 (물론 그렇게 간단하지는 않지만 수정해야 할 장소를 쉽게 식별하기가 쉽습니다 ... bufferElementType 가까운).

TypEdef의 유효 / 잘 사용됩니까? 문제의 가치가 없습니까? 앞으로 어느 시점에서 두통을 줄까요? 관리 프로그래머가 나를 미워하게 만들까요?

나는 읽었다 C ++에서 TypEdef를 언제 사용해야합니까?, 그러나 아무도 이것을 실제로 다루지 않았습니다.

도움이 되었습니까?

해결책

그것은 훌륭한 (그리고 정상적인) 사용법입니다. 그러나 예를 들어 선택한 유형이 동일한 서명/부호없는 기준을 충족하거나 연산자와 유사하게 응답해야합니다. 그런 다음 나중에 유형을 변경하는 것이 더 쉬울 것입니다.

또 다른 옵션은 템플릿을 사용하여 컴파일하는 순간까지 유형을 고정하지 않는 것입니다. 다음과 같이 정의 된 클래스

template <typename CharType>
class Whatever
{
   CharType aChar;
   ...
};

선택한 Char 유형으로 작업 할 수 있으며 모든 연산자에게 동일한 방식으로 응답합니다.

다른 팁

TypEdefs의 또 다른 장점은 현명하게 사용되면 가독성을 높일 수 있다는 것입니다. 정말 바보 같은 예로서, 미터와 학위는 둘 다 복식이 될 수 있지만, 당신은 그들을 구별하고 싶습니다. typedef를 사용하는 것은 빠르고 쉬운 솔루션입니다. 오류를 더 눈에 보이게하십시오.

메모: 위의 예에 대한보다 강력한 솔루션은 미터와 학위에 대해 다른 유형을 만드는 것이 었습니다. 따라서 컴파일러는 사물 자체를 시행 할 수 있습니다. 그러나 약간의 작업이 필요하지만 항상 돈을 지불하지는 않습니다. typedefs 사용은 오류를 만드는 빠르고 쉬운 방법입니다. 보이는, 위에서 링크 된 기사에 설명 된대로.

예, 이것은 적어도 C에서 typedef의 완벽한 사용법입니다.

C ++의 경우 Diego Sevilla가 제안한 것처럼 템플릿이 더 나은 아이디어라고 주장 할 수 있지만 단점이 있습니다. (추가 작업 데이터 유형을 사용하는 모든 것이 아직 몇 개의 클래스, 편집 시간이 느리고 더 복잡한 소스 파일 구조 등에 랩핑되지 않은 경우)

또한 두 가지 접근 방식을 결합하는 것이 합리적입니다. 즉, TypEdef 이름을 템플릿 매개 변수에 제공합니다.

네트워크를 통해 데이터를 보낼 때 Char 및 기타 정수 유형은 교환 할 수 없을 수 있습니다 (예 : Endian-Inness). 이 경우 특수 기능이있는 템플릿 클래스를 사용하는 것이 더 합리적 일 수 있습니다. (보내다u003Cchar> 바이트를 보내고 보내십시오u003Cshort> 네트워크 바이트 주문으로 먼저 변환)

또 다른 솔루션은 헬퍼 메소드 (ConverttonetWorkorderBytes ())가있는 "bufferelementType"클래스를 만드는 것이지만, 그것은 당신에게 과잉이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top