libcult

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;
}
}

blog comments powered by Disqus