"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar la palabra clave "propia" automática en C ++?

¿Cómo implementar la palabra clave "propia" automática en C ++?

Publicado el 2025-04-13
Navegar:934

How Can We Implement an Autonomous

self en c: la implementación autónoma

la palabra clave, ampliamente utilizada en idiomas como PHP, plantea un desafío en C debido a la ausencia de un mecanismo equivalente. Si bien una implementación específica de clase que utiliza typedefs anidadas es sencilla, requiere duplicación y riesgos para la introducción de errores sutiles. Este artículo explora una solución elegante que usa DeclType y plantillas para lograr una autogestivo autónoma.

declarando a sí mismo con DeclType

el intento inicial de introducir DeclType falla porque intenta acceder a este fuera de una instancia. Para resolver esto, necesitamos encapsular la Declaración de autopista dentro de una plantilla:

template 
class SelfBase: public Ts...
{
protected:
    typedef X self;
};

esta plantilla sirve como la clase base para tipos que pueden acceder a self.

conveniencia macros

para hacer que el uso de SelfBase sea simplificado, dos macros se introducen:

[&]
    with_ x). X
  • with_self_derived (x, ...): agrega selfbase as clases base a x

ejemplos

usando estas macros, ahora podemos definir las clases con self:

class con { prueba vacía () { yo foo; // Self ya está disponible } }; // herencia múltiple Clase With_Self_derived (Bar, Foo, Foo2) { / * ... */ };

class WITH_SELF(Foo)
{
    void test()
    {
        self foo; // self is now available
    }
};

// Multiple inheritance
class WITH_SELF_DERIVED(Bar,Foo,Foo2)
{
    /* ... */
};
conclusion

aprovechando decltype y plantillas, es posible implementar un tipo de miembro de sí mismo autónomo en c. Este enfoque permite el uso de Self dentro de las clases sin el riesgo de errores silenciosos debido a la redefinición de clase defectuosa. Las macros de conveniencia proporcionadas hacen que la implementación sea sencilla y flexible, lo que permite múltiples herencias de clase base y diferentes combinaciones de clases básicas y regulares.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3