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
?
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.