背景
不幸的是,当前的 C++ 标准缺少在stdint标头中定义的 C99 的精确宽度类型。
我能找到的下一个最好的东西(就可移植性而言)是从库中实现Boost的。cstdint.hppBoost.Integer
关注点
也就是说,我遇到了一些问题:
Boost的实现转储所有的typedefs boost namesapce(而不是类似的东西boost::stdint)。这非常难看,因为现在您要么被迫using仅对您感兴趣的类型使用 -directive(这是一项额外的维护工作),要么将整个boost namespace指令带入全局¹范围(这违背了namespaces的观点)。例如,我当然可以很冗长,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”)。