Objetos función y functors
Escriba clases con operator() para crear objetos invocables con estado.
Objetos función y functors es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué es un functor?
Un functor (objeto función) es una clase que sobrecarga operator(). Sus instancias se pueden invocar como funciones.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25¿Por qué no usar simplemente una función?
Los functors mantienen estado. Una función común no lo hace. El estado permite configurar, contar y crear callbacks con estado.
struct Counter {
int count = 0;
int operator()(int x) { ++count; return x; }
};
Counter c;
c(10); c(20); c(30);
std::cout << c.count; // 3Comportamiento configurable
Almacene la configuración en los miembros del functor. El mismo tipo de functor funciona con muchos conjuntos de parámetros.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
over10(15); // true
over10(5); // falseUso de functors con algoritmos de STL
Los algoritmos de STL aceptan cualquier objeto invocable: functors, lambdas y punteros a funciones.
std::vector<int> v = {1, 11, 5, 99, 8};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});
std::cout << *it; // 11Functors predefinidos en <functional>
La biblioteca estándar proporciona functors listos para usar: std::plus, std::less, std::equal_to, std::negate y muchos más.
#include <functional>
std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), std::greater<int>{});
// sorted descendingFunctor frente a puntero a función
Los functors suelen permitir una mejor inserción en línea porque su operator() es una llamada directa. Los punteros a funciones pueden ser más flexibles, pero realizan llamadas indirectas.
Functors como parámetros de plantilla
Muchos contenedores y algoritmos de STL aceptan un functor como parámetro de plantilla: comparadores de conjuntos, funciones hash y asignadores.
std::set<int, std::greater<int>> s = {1, 2, 3};
// s iterates in descending order: 3, 2, 1Las lambdas son functors
El compilador genera una clase única con operator() para cada lambda. Las lambdas son azúcar sintáctico sobre los functors.
Cuándo escribir un functor
Use un functor escrito manualmente cuando:
- La misma lógica se use en muchos lugares (asígnele un nombre)
- Forme parte de su API pública
- Necesite un comportamiento específico al copiarlo o moverlo
Cuándo usar una lambda en su lugar
Para un uso puntual, una lambda es más corta y clara. Para un comportamiento reutilizable, un functor con nombre mejora la legibilidad.
Componibilidad
Combine functors mediante std::bind o, de forma más moderna, componiendo lambdas. Las bibliotecas funcionales como Boost también proporcionan combinadores.
Comprobación rápida
¿Cuál es la capacidad principal de un functor frente a una función común?
Resumen
Un functor es una clase con operator(). Mantiene estado, se integra con los algoritmos de STL y sirve de base para las lambdas. Use functors con nombre para comportamientos reutilizables y lambdas para lógica de un solo uso.
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Objetos función y functors» es gratis?
Sí — el texto completo de «Objetos función y functors» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Objetos función y functors»?
Escriba clases con operator() para crear objetos invocables con estado. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Objetos función y functors»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Objetos función y functors
- Capturas lambda por valor, por referencia y mutable
- Lambdas genéricas y cierres en C++14
- std::function: objetos invocables con borrado de tipos