La implementación del estándar C99 de Boost es tremendamente útil. Una cosa me molesta, sin embargo. Vuelcan todos sus typedefs en el boost namespace
. Esto me deja con tres opciones cuando se utiliza esta instalación:Uso "cstdint" de Boost
- Uso "
using namespace boost
" - Uso "
using boost::[u]<type><width>_t
" - explícitamente se refieren al tipo de destino con el prefijo
boost::
; por ejemplo,boost::uint32_t foo = 0;
- Opción № 1 tipo de derrotas el punto de espacios de nombres. Incluso si se utiliza dentro del alcance local (por ejemplo, dentro de una función), cosas como los argumentos de funciones todavía tienen que estar prefijados como la opción № 3.
- Opción № 2 es mejor, pero hay muchos tipos de estos, por lo que puede obtener ruidoso.
- Opción № 3 agrega un nivel extremo de ruido; el prefijo
boost::
suele ser ≥ a la longitud del tipo en cuestión.
Mi pregunta es: ¿Cuál sería la forma más elegante de llevar todos estos tipos en el espacio de nombres global? ¿Debo simplemente escribir un contenedor alrededor del boost/cstdint.hpp
que utiliza la opción № 2 y terminarlo?
Además, envolviendo la cabecera como tal no funcionaba en VC++ 10 (problemas con los encabezados de biblioteca estándar):
namespace Foo
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace Foo::boost_alias;
EDIT: Creo que otra opción es utilizar el preprocesador para que funcione en VC 10? Tomando el fragmento de arriba:
#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
Menos trabajo, supongo?
posible duplicado de http://stackoverflow.com/questions/1481733/portable-c-03-exact-width-types –
guión @gf: ingenioso, gracias. – patt0h
¿Por qué necesita * todos * estos tipos? A menudo uso uno o dos de ellos, pero no recuerdo haberlos necesitado todos. – jalf