부스트의 C99 stdint 구현은 매우 편리합니다. 한가지는 나를 괴롭힌다. 그들은 모든 typedef를 boost namespace
에 버립니다. 이 기능 사용할 때 세 가지 선택 사항으로 나를 잎 :부스트의 "cstdint"사용법
- 사용 "
using namespace boost
" - 사용 "
using boost::[u]<type><width>_t
" - 명시 적으로
boost::
접두어 대상 유형을 참조; 예컨대,
boost::uint32_t foo = 0;
옵션 패배 № 1 종류의 스페이스 포인트. 로컬 범위 내에서 (예 : 함수 내에서) 사용되는 경우에도 함수 인수와 같은 옵션은 옵션 № 3과 같이 접두사를 사용해야합니다.- 옵션 № 2가 더 좋지만 이러한 유형이 많기 때문에 시끄러운.
- 옵션 № 3은 극한의 잡음을 추가합니다.
boost::
접두어는 종종 해당 유형의 길이보다 ≥입니다.
내 질문은 : 무엇 전역 네임 스페이스에 이러한 유형을 모두 가져 오는 가장 우아한 방법이 될 것이다? 방금 옵션 № 2를 사용하는 boost/cstdint.hpp
주위에 래퍼를 작성하고 완료해야합니까?
또한, 그래서 VC++ 10 (표준 라이브러리 헤더 문제)에 작동하지 않았다 같은 헤더를 포장 :
namespace Foo
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace Foo::boost_alias;
편집 : 나는 다른 옵션은 전처리를 사용하는 것입니다 생각 VC 10에서 작동하도록하려면? 위의 스 니펫을 취하는 방법 :
#ifndef FOO_HPP_INCLUDED
#define FOO_HPP_INCLUDED
#if _MSC_VER >= 1600 /*VC++ 10*/ || defined USE_NATIVE_STDINT_HEADER
#include <stdint.h>
#else
namespace cstdint_wrapper
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace cstdint_wrapper::boost_alias;
#endif
#endif
적은 작업일까요?
가능한 복제본 : http://stackoverflow.com/questions/1481733/portable-c-03-exact-width-types –
@gf : nifty script, thanks. – patt0h
왜이 모든 유형의 * all *이 필요합니까? 나는 종종 그 중 한두 가지를 사용하지만, 나는 그들 모두를 필요로 함을 기억하지 못합니다. – jalf