#include <iostream>
void foo()
{
std::cout << "global foo()" << std::endl;
}
struct A {
void foo()
{
std::cout << "A::foo()" << std::endl;
}
};
struct B : public A {
void call()
{
foo();
}
};
int main(int argc, char **argv)
{
B b;
b.call();
return 0;
}
Esto da expected result:¿Orden de búsqueda del alcance del símbolo de C++ diferente para la clase de plantilla y sin plantilla?
A::foo()
Sin embargo después de cambiar dos líneas (clase B de la plantilla):
#include <iostream>
void foo()
{
std::cout << "global foo()" << std::endl;
}
struct A {
void foo()
{
std::cout << "A::foo()" << std::endl;
}
};
template <typename T> // change here
struct B : public T {
void call()
{
foo();
}
};
int main(int argc, char **argv)
{
B<A> b; // and here
b.call();
return 0;
}
consigo unexpected result:
global foo()
Y el uso de this->
es no es una opción ya que estoy tratando de crear comió un mecanismo de "retroceso".
Interesante de hecho. –
Podría 'call() {T :: foo(); } 'estar bien para usar? Funciona. – chris
¿Qué tal si llamamos 'T :: foo();' desde 'B :: call'? – mfontanini