Boost#39;s quot;cstdintquot; Usage(提高使用率(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
中没有介绍的我应该知道的内容?
这篇关于提高使用率(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:提高使用率(&Q)
基础教程推荐
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01