Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Anunciarse aquí

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

libcult

Junio 29th, 2005 - [Enlace local]

Mi amigo Boris Kolpackov, uno de las personas más inteligentes que conozco, y por supuesto, uno de los que más C++ sabe, acaba de sacar a la luz su librería libcult, cuyo nombre podría indicar algún tipo de culto a C++, que por otro lado es verdad. En ella se pueden encontrar peripecias con el lenguaje C++ que es difícil encontrar en otro sitio. No he tenido tiempo de estudiar exactamente todo lo que ofrece: parsers, generadores de XDR, una librería de opciones de la línea de comandos muy bien diseñada, utilidades para obtener el tipo de una variable en tiempo de ejecución, etc. Lo verdaderamente interesante de ese código es que es realmente inteligente, aparte de útil. Como ejemplo, sacado de la documentación. Este ejemplo muestra muy bien la sencillez y potencia del diseño de la librería, en este caso, para manejar la línea de comandos:

namespace
{
  extern Char const help[] = "help";
  extern Char const version[] = "version";
  extern Char const outdir[] = "outdir";
}
	
typedef
CLI::Options<help, Boolean,
             version, Boolean,
             outdir, String>
Options;
	
Int
main (Int argc, Char* argv[])
{
  try
  {
    Options options (CLI::parse<Options> (argc, argv));
	
    if (options.value<help> ())
    {
      cerr << "usage: " << argv[0] << " [–help] [–version] [–outdir <dir>]"
           << endl;
      return 0;
    }
	
    if (options.value<version> ())
    {
      cerr << argv[0] << " 1.2.3" << endl;
      return 0;
    }
	
    if (String dir = options.value<outdir> ())
    {
      cerr << "outdir: " << dir << endl;
    }
  }
  catch (CLI::UnexpectedOption const& e)
  {
    cerr << "unexpected option " << e.option () <<endl;
  }
  catch (CLI::OptionFormat const& e)
  {
    cerr << "bad format for " << e.option () << endl;
  }
}

» Leer más, comentarios, etc...