Frameworks CLI para C++: escribiendo aplicaciones de consola rápida y cómodamente

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Frameworks CLI para C++: escribiendo aplicaciones de consola rápida y cómodamente



Crear una interfaz de línea de comandos (CLI) de calidad es una parte importante del desarrollo en C++. El análisis manual de argumentos a través de argc/argv y getopt rápidamente se vuelve engorroso y propenso a errores, especialmente con una gran cantidad de opciones. Aquí es donde ayudan las bibliotecas especializadas: los frameworks CLI. Automatizan el análisis, la generación de ayuda, la verificación de tipos y ayudan a escribir código más limpio y mantenible.



En este artículo, veremos los tres frameworks CLI más populares y modernos para C++: CLI11, cxxopts y argparse. Conocerás sus puntos fuertes, verás ejemplos de código y podrás elegir la herramienta adecuada para tu proyecto.



1. CLI11 — el estándar moderno



CLI11 es una biblioteca header-only que, con razón, se considera una de las mejores soluciones para C++11 y versiones posteriores. Ofrece una API intuitiva, validación potente y generación automática de ayuda.



Características clave:

  • Header-only: no requiere compilación, solo incluir el archivo de cabecera.
  • Ayuda automática: las banderas -h y --help funcionan de inmediato.
  • Validación: validadores integrados y personalizados para argumentos (rango, expresión regular, existencia de archivo).
  • Soporte de subcomandos: ideal para utilidades complejas (como git o docker).
  • Formateo: salida de ayuda personalizable.


Ejemplo de uso de CLI11:

Aplicación simple que acepta un nombre y una bandera opcional de saludo:

#include <CLI/CLI.hpp>#include <iostream>

int main(int argc, char** argv) { CLI::App app{"Demostración de CLI11"};

std::string name; bool greet = false;

app.add_option("-n,--name", name, "Tu nombre")->required(); app.add_flag("-g,--greet", greet, "Mostrar saludo");

CLI11_PARSE(app, argc, argv);

std::cout << "Hola, " << name << "!" << std::endl; if (greet) { std::cout << "¡Buen día!" << std::endl; } return 0;}

Cómo funciona: La biblioteca analiza los argumentos por sí misma, verifica la obligatoriedad de la opción --name y genera ayuda al invocar ./app --help.



2. cxxopts — simplicidad y ligereza



cxxopts es otra biblioteca header-only, orientada al minimalismo y la simplicidad. Es perfecta para utilidades pequeñas donde no se necesitan subcomandos, pero la legibilidad del código es importante.



Características clave:

  • API simple: agregar opciones mediante llamadas encadenadas.
  • Conversión automática de tipos: int, double, string y otros.
  • Soporte de argumentos posicionales.
  • Prefijos personalizables: se pueden usar - o --.


Ejemplo de uso de cxxopts:

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char** argv) { cxxopts::Options options("myapp", "Ejemplo de cxxopts");

options.add_options() ("f,file", "Nombre del archivo", cxxopts::value<std::string>()) ("v,verbose", "Salida detallada", cxxopts::value<bool>()->default_value("false")) ("h,help", "Mostrar ayuda");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << std::endl;

Recommendations