문제

배경


불행하게도 현재 C++ 표준에는 다음에 정의된 C99의 정확한 너비 유형이 부족합니다. stdint 머리글.

(이식성 측면에서) 제가 찾을 수 있는 다음으로 좋은 점은 Boost'에스 cstdint.hpp 구현부터 Boost.Integer 도서관.

우려사항


즉, 몇 가지 문제가 있습니다.

Boost의 구현은 모든 것을 덤프합니다. typedef에 있어요 boost namesapce (대신에 boost::stdint).이것은 완전히 추악합니다. 왜냐하면 이제 강제로 다음 중 하나를 사용해야 하기 때문입니다. using-관심 있는 유형에 대해서만 지시하거나(추가 유지 관리 작업임) 전체 항목을 가져오거나 boost namespace 전역 ¹ 범위로 (이것은 namespace에스).물론 장황하게 입력할 수도 있습니다. boost::uint32_t 예를 들어, 이는 어디에서나 미래 친화적이지 않습니다².

질문


나는 기본적으로 조언을 구하고 있습니다.아직 표준이 아닌(어차피 C++ '03에는 없음) 유형을 최대한 투명하게 활용하는 가장 좋은 방법은 무엇입니까?

이 헤더를 사용하거나 직접 롤링한 경우 이러한 유형을 어떻게 사용합니까?맹목적으로 병합 boost namespace 글로벌 속으로 namespace, 모든 항목에 "boost::", 다음을 포함하는 헤더를 작성했습니다. Boost.Integer'에스 cstdint.hpp, 등.?

어떤 조언이라도 감사하겠습니다.

마지막으로, (이건 호언장담이 아니었지만) 저는 수학 중심의 코드를 작성하고 있으므로 너비 보장이 중요합니다.

설명


1 - 함수를 작성할 때 전역 범위는 유일한 옵션입니다. / class template이러한 유형을 인수로 사용하는 s입니다.

2 - 표준의 다음 반복이 마무리될 때 stdint.h ~ 안으로 cstdint, 앞에 "boost::".그러면 이는 전혀 쓸모가 없는 추가 종속성(예: "boost/cstdint.hpp")이 됩니다.

도움이 되었습니까?

해결책

stdint.h를 사용하고 stdint.h가 없는 컴파일러에 제공할 수 있습니다(예:MSVC의 경우 - msinttypes).아니면 cstdint를 작성하세요. using Boost의 모든 typedef(일회성이므로 유지 관리가 문제가 될 것이라고 생각하지 않습니다).

생성도 쉽습니다.사용 이 작은 스크립트, 알겠습니다.확인하기 위해 정의를 추가할 수도 있습니다. int64.

#ifndef GEN_CSTDINT
#define GEN_CSTDINT

#include <boost/cstdint.hpp>

using boost::int16_t;
using boost::int32_t;
using boost::int64_t;
using boost::int8_t;
using boost::int_fast16_t;
using boost::int_fast32_t;
using boost::int_fast64_t;
using boost::int_fast8_t;
using boost::int_least16_t;
using boost::int_least32_t;
using boost::int_least64_t;
using boost::int_least8_t;
using boost::intmax_t;
using boost::uint16_t;
using boost::uint32_t;
using boost::uint64_t;
using boost::uint8_t;
using boost::uint_fast16_t;
using boost::uint_fast32_t;
using boost::uint_fast64_t;
using boost::uint_fast8_t;
using boost::uint_least16_t;
using boost::uint_least32_t;
using boost::uint_least64_t;
using boost::uint_least8_t;
using boost::uintmax_t;

#endif // GEN_CSTDINT

다른 팁

당신은 사용할 수 있습니다 Stdint의 휴대용 버전.

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