提高使用率(&Q)

Boost#39;s quot;cstdintquot; Usage(提高使用率(Q))
本文介绍了提高使用率(&Q)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Boost的C99 stdint实现非常方便。不过,有一件事困扰着我。它们将所有类型定义转储到boost namespace中。在使用此工具时,我有三个选择:

  1. 使用"using namespace boost"
  2. 使用"using boost::[u]<type><width>_t"
  3. 显式引用带有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中没有介绍的我应该知道的内容?

这篇关于提高使用率(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Unknown type name __m256 - Intel intrinsics for AVX not recognized?(未知类型名称__M256-英特尔AVX内部功能无法识别?)
How can an declare an array in a function that returns an array in c++(如何在用C++返回数组的函数中声明数组)
Is it possible to define a class in 2 or more file in C++?(在C++中可以在两个或多个文件中定义一个类吗?)
Why can#39;t I create an array of automatic variables?(为什么我不能创建一个自动变量数组?)
zeromq: reset REQ/REP socket state(Zeromq:重置REQ/REP套接字状态)
Can I resize a vector that was moved from?(我可以调整从中移出的矢量的大小吗?)