背景
不幸的是,当前的 C++ 标准缺少在stdint
标头中定义的 C99 的精确宽度类型。
我能找到的下一个最好的东西(就可移植性而言)是从库中实现Boost
的。cstdint.hpp
Boost.Integer
关注点
也就是说,我遇到了一些问题:
Boost
的实现转储所有的typedef
s boost namesapce
(而不是类似的东西boost::stdint
)。这非常难看,因为现在您要么被迫using
仅对您感兴趣的类型使用 -directive(这是一项额外的维护工作),要么将整个boost namespace
指令带入全局¹范围(这违背了namespace
s的观点)。例如,我当然可以很冗长,boost::uint32_t
到处打字,但这也不是很适合未来的²。
问题
我基本上是在寻求建议。尽可能透明地利用这些尚不标准(无论如何都不是在 C++ '03 中)类型的最佳方法是什么?
对于那些使用此标头或滚动您自己的标头的人,您如何使用这些类型?盲目地把 's 合并boost namespace
到全局namespace
中,用“”前缀所有的东西boost::
,写一个包装Boost.Integer
's的标题cstdint.hpp
,等等?
任何建议表示赞赏。
最后,说了这么多(顺便说一句,这不是咆哮),我正在编写数学密集型代码,所以宽度保证对我来说很重要。
澄清
1 - 当我编写class
template
将这些类型作为参数的函数/s 时,全局范围是我唯一的选择。
2 - 当标准的下一次迭代包含stdint.h
到cstdint
时,我会遇到一堆以“ boost::
”为前缀的代码。那么,这将是一个完全无用的额外依赖项(即“boost/cstdint.hpp”)。