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.

Cómo reemplazo la llamada al constructor base

En una reciente respuesta de SO (enlace) , hay una parte del fragmento que no entiendo lo que está sucediendo.

struct VariableDepthList : std::variant<><variabledepthlist>, int> {
private:
    using base = std::variant<><variabledepthlist>, int>;
public:
    using base::base;
    VariableDepthList(std::initializer_list<variabledepthlist> v) : base(v) {}
};

¿Llamar a base(v) está llamando al constructor de la clase base, si es así, qué es equivalente a no tener using base::base?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El fragmento de código define una estructura “VariableDepthList” que es una subclase de “std::variant<>, int>”. La instrucción “using base = std::variant<>, int>;” crea un alias para la clase base dentro de la estructura “VariableDepthList”.

    La instrucción “using base::base;” trae los constructores de la clase base dentro de la estructura “VariableDepthList”. Esto permite que “VariableDepthList” utilice los constructores de “std::variant<>, int>” sin necesidad de definirlos nuevamente.

    El constructor “VariableDepthList(std::initializer_list v) : base(v) {}” es un constructor específico de “VariableDepthList” y no heredado de la clase base. Toma una lista de inicializadores de objetos “VariableDepthList” y la pasa al constructor de la clase base.

    Sin la instrucción “using base::base”, los constructores de la clase base tendrían que ser definidos dentro de “VariableDepthList”, aunque no estén haciendo nada diferente.

Comments are closed.