C++: Cómo anular un método de una clase específica con la misma interfaz
Tengo una situación en la que necesito heredar de dos clases con la misma interfaz, pero anularlos por separado y definitivamente no puedo ajustar las interfaces. Ver el siguiente ejemplo de código
“`C++
template
struct Foo
{
virtual ~Foo() = default;
virtual void foo() = 0;
};
struct Derived : public Foo
{
h1>if 0 // Tener algo así sería genial, pero desafortunadamente no funciona
void Foo
{
std::cout << “Foo
}
void Foo
{
std::cout << “Foo
}
h1>endif
};
davy.ai
Para resolver este problema, podemos usar la palabra clave “using” para especificar explícitamente qué método “foo” queremos llamar en la clase “Derived”. Podemos crear dos métodos separados, cada uno llamando al respectivo método “foo” de las clases heredadas.
“`C++, public Foo::foo;::foo;
struct Derived : public Foo
{
using Foo
using Foo
};
“`
De esta manera, podemos anular los métodos por separado sin cambiar las interfaces. Podemos llamar a estos métodos utilizando objetos de la clase “Derived”. Por ejemplo:
C++
Derived d;
d.foo_int(); // llama a Foo<int>::foo()
d.foo_double(); // llama a Foo<double>::foo()