es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tag: STD-FUNCTION

Sobre el uso de std::function y el problema de if-else. La clase std::function en C++ es una plantilla funcional que puede ser utilizada para almacenar y manipular cualquier tipo de función. Esta clase es especialmente útil en el desarrollo de aplicaciones de Tecnología de la Información (TI) ya que proporciona una forma flexible para trabajar con diferentes tipos de funciones. Sin embargo, puede surgir un problema común al utilizar std::function en combinación con declaraciones if-else. En lugar de utilizar if-else para verificar el tipo de función almacenada en un objeto std::function, se recomienda utilizar una función lambda o una función miembro para manejar las distintas funciones. Esto es especialmente importante si se trabaja con tipos de función heredados o si se espera que el código sea extensible y adaptable. En resumen, al utilizar std::function, es importante considerar cuidadosamente cómo se van a manejar y usar las diferentes funciones almacenadas. Evitar depender en exceso de declaraciones if-else puede ayudar a mantener un código más limpio y legible, y a evitar problemas potenciales relacionados con la gestión de tipos de funciones en C++.

class A: def f0(self): print(“f0”) def f1(self): print(“f1”) def f2(self): print(“f2”) #….. more functions fn()… class B: def f(self, n): if n == 0: obj.a.f0() elif n == 1: obj.a.f1() elif n == 2: obj.a.f2() #…..more else if here obj = B()

¿Deberías pasar un objeto invocable como argumento de destino mediante std::function o mediante una referencia universal?

Considere el siguiente código: #include <functional> #include <iostream> struct S1 { S1(const std::function<void()>& func) : func{func} {} std::function<void()> func; }; struct S2 { template<typename f=””> S2(F&& func) : func{std::forward<f>(func)} {} std::function<void()> func; }; int main() { S1 s1{[]{ std::cout << “Se llamó a la función S1\n”; }}; S2 s2{[]{ std::cout . . . Read more

C++ std::function para tomar funciones con parámetro de subclase

[Actualización] Razón de esta pregunta: Hay muchas lambdas existentes definidas como [](const ChildType1& child), todas en un gran registro. Queremos registrar nuevas lambdas como [](const ChildType2& child) en el mismo registro. Si definimos el envoltorio de función usando Parent, para las muchas lambdas existentes necesitamos cambiarlas a [](const Parent& someone) . . . Read more