Crea una interfaz EstrategiaImpresion con un método virtual puro imprimir(const std::string&).
-
Implementa dos clases concretas:
ImpresionConsola— muestra el mensaje por consola.ImpresionArchivo— muestra"Guardando en archivo: [mensaje]".
-
Crea una clase
Documentoque contenga un puntero inteligente aEstrategiaImpresiony un métodoprocesar(const std::string&)que delegue la acción en la estrategia. -
En
main(), crea unDocumentocon cada estrategia y llama aprocesar("Hola mundo"). -
Comprueba que el comportamiento cambia sin modificar
Documento.
Dado un vector de cadenas:
{"cereza", "manzana", "banana", "arándano", "kiwi"}- Usa
std::find_ifcon una lambda para buscar la primera cadena que tenga más de 5 caracteres. - Vuelve a usar
std::find_ifcon otra lambda distinta, que busque la primera cadena que empiece por la letra 'b'. - Muestra el resultado de cada búsqueda (o indica que no se ha encontrado nada).
Escribe una función
validarEntrada(const std::string& valor, std::function<bool(const std::string&)> validador)
que reciba una cadena y una función de validación. La función debe imprimir si la entrada es válida o no dependiendo del resultado de validador(valor).
En main(), define tres lambdas:
esNumero: comprueba si la cadena contiene únicamente dígitos.esEmailSimple: comprueba que la cadena contiene exactamente un@y al menos un.después.longitudAdecuada: comprueba si la longitud está entre 5 y 10 caracteres.
Llama a validarEntrada() varias veces usando distintos valores y distintos validadores, para observar cómo la validación cambia sin modificar la función principal.
Define una clase FormateadorMensaje con un atributo privado std::string prefijo_.
- En el constructor, inicializa
prefijo_con el valor que se le pase como parámetro. - Implementa
operator()(const std::string& mensaje)para que devuelva una cadena con el formato:prefijo_ + ": " + mensaje.
En main():
-
Crea un objeto
FormateadorMensaje info("INFO"). -
Crea un objeto
FormateadorMensaje error("ERROR"). -
Define un conjunto de mensajes, por ejemplo:
{"Inicio del programa", "Archivo no encontrado", "Operación completada"}. -
Aplica ambos functores a cada mensaje y muestra el resultado por pantalla, algo como:
INFO: Inicio del programaERROR: Inicio del programa- ...
Supón que tienes valores leídos de un sensor, y quieres aplicar diferentes estrategias de filtrado sin crear una jerarquía de clases para cada una.
-
Define un alias
using Filtro = std::function<double(double)>; -
Crea una clase
ProcesadorSensorque reciba unFiltroen su constructor y lo almacene internamente. -
Implementa un método
double procesar(double valor)que aplique el filtro recibido. -
En
main(), crea tresProcesadorSensordistintos:- Uno con una lambda que no modifica el valor (filtro identidad).
- Otro con una lambda que aplica un umbral mínimo, por ejemplo:
si
valor < 10, devolver10, en caso contrario devolvervalor. - Otro con una lambda que aplique un suavizado simple, por ejemplo:
devolver
(valor * 0.8).
-
Aplica cada filtro a un valor ejemplo, por ejemplo
5.0, y muestra los resultados.