Framework CLI para C++: cppcli — creación de aplicaciones de consola

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

Framework CLI para C++: cppcli — creación de potentes aplicaciones de consola



El desarrollo de interfaces de línea de comandos (CLI) en C++ a menudo requiere análisis manual de argumentos, manejo de banderas y organización de comandos. La biblioteca cppcli proporciona un framework listo para crear rápidamente aplicaciones CLI profesionales. Permite centrarse en la lógica de negocio, no en la infraestructura de entrada/salida. En este artículo, analizaremos las características clave de cppcli, proporcionaremos ejemplos de código y mostraremos cómo integrarlo en su proyecto.



Características principales de cppcli



  • Definición declarativa de comandos — cada comando se describe como una clase separada o una función lambda.
  • Análisis automático de argumentos — soporte para argumentos posicionales, con nombre y banderas.
  • Salida a color y formato — utilidades integradas para salida estilizada (colores ANSI, tablas, barras de progreso).
  • Validación y ayuda — generación automática de mensajes de ayuda y verificación de argumentos obligatorios.
  • Extensibilidad — soporte para tipos de argumentos personalizados y middleware.


Inicio rápido: instalación y primer ejemplo



cppcli se distribuye como una biblioteca header-only. Para instalarla, clone el repositorio o use CMake FetchContent. Inclusión en el proyecto:



#include <cppcli/cli.h>#include <iostream>

int main(int argc, char* argv[]) { cppcli::App app("Mi aplicación", "1.0.0"); app.run(argc, argv); return 0;}


Este es un esqueleto mínimo. Ahora agreguemos un comando greet que recibe el nombre del usuario.



Ejemplo: comando con argumentos



#include <cppcli/cli.h>

int main(int argc, char* argv[]) { cppcli::App app("Greeter", "1.0.0");

app.command("greet", "Saluda al usuario") .argument<std::string>("name", "Nombre del usuario") .action([](const cppcli::Args& args) { std::string name = args.get<std::string>("name"); std::cout << "¡Hola, " << name << "!"; });

app.run(argc, argv); return 0;}


Ejecución: ./app greet Juan mostrará ¡Hola, Juan!. Si no se especifica el argumento, cppcli mostrará un error y la ayuda.



Banderas y parámetros opcionales



Agreguemos la bandera --formal para un saludo formal:



app.command("greet", "Saluda al usuario")    .argument<std::string>("name", "Nombre")    .flag("--formal", "-f", "Saludo formal")    .action([](const cppcli::Args& args) {        std::string name = args.get<std::string>("name");        bool formal = args.get<bool>("formal");        if (formal)            std::cout << "Buenos días, " << name << "!";        else            std::cout << "¡Hola, " << name << "!";    });


Ahora ./app greet Juan --formal mostrará Buenos días, Juan!.



Comandos anidados y subcomandos



cppcli admite una estructura de comandos en árbol. Por ejemplo, para una utilidad de gestión de proyectos:



app.command("project", "Gestión de proyectos")    .command("create", "Crear proyecto")        .argument<std::string>("name", "Nombre del proyecto")        .action([](const cppcli::Args& args) {            std::cout << "Proyecto creado: " << args.get<std::string>("name") << "";        })    .command("delete", "Eliminar proyecto")        .argument<std::string>("name", "Nombre del proyecto")        .flag("--force", "Sin confirmación")        .action([](const cppcli::Args& args) {            // lógica de eliminación        });


Ejecución: ./app project

Recommendations