提高使用率(&Q)
Boost的C99 stdint实现非常方便。不过,有一件事困扰着我。它们将所有类型定义转储到boost namespace
中。在使用此工具时,我有三个选择:
- 使用"
using namespace boost
" - 使用"
using boost::[u]<type><width>_t
" - 显式引用带有
boost::
前缀的目标类型;例如boost::uint32_t foo = 0;
- 选项№1有点违背了名称空间的要点。即使在局部作用域中使用(例如,在函数中),像函数参数这样的东西仍然必须像选项№3一样加上前缀。
- 选项№2较好,但此类类型较多,因此可能会产生噪音。
- 选项№3增加了极大的噪音;
boost::
前缀通常与相关类型的长度相同(≥)。
我的问题是:将所有这些类型引入全局命名空间的最优雅方式是什么?我应该只在
boost/cstdint.hpp
周围编写一个使用选项№2的包装并完成它吗?
另外,这样包装标头在VC++10上不起作用(标准库标头有问题):
namespace Foo
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace Foo::boost_alias;
编辑:我猜另一个选择是使用预处理器使其在VC10上工作?获取上面的代码片段:
#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
我想是工作量减少了吧?
解决方案
我只使用C99的stdint.h
(它现在实际上是在VS 2010中)。对于不包括它的Visual C/C++版本,我使用来自MinGW的公共域版本,我修改该版本以使用VC6(从我不得不在VC6中工作时起):
- http://snipplr.com/view/18199/stdinth/
您可以在此SO问题中考虑其他几个选项:C99 stdint.h header and MS Visual Studio
如果您想继续使用boost/cstdint.hpp
,我想说的是,建议实现一个将类型带入全局命名空间的包装器标头。
boost/cstdint.hpp
是否提供了stdint.h
中没有介绍的我应该知道的内容?
相关文章