#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;
}
Questo dà expected result:Ordine di ricerca del simbolo C++ diverso per modello e classe non modello?
A::foo()
Tuttavia dopo aver cambiato due linee (classe B al modello):
#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;
}
ottengo unexpected result:
global foo()
E usando this->
è non è un'opzione come sto cercando di creare mangiato un meccanismo di "fallback".
Interessante davvero. –
Would 'call() {T :: foo(); } 'be ok da usare? Funziona. – chris
Che ne dici di chiamare 'T :: pippo();' da 'B :: call'? – mfontanini