#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;
}
Daje expected result:Kolejność wyszukiwania symboli C++ dla szablonu i klasy innej niż szablon?
A::foo()
Jednak po zmianie dwie linie (klasa B do szablonu):
#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;
}
uzyskać unexpected result:
global foo()
i korzystania this->
jest nie jest opcją, ponieważ próbuję stworzyć zjadł mechanizm "awaryjny".
Co ciekawe. –
Czy 'call() {T :: foo(); } 'być w porządku, aby użyć? To działa. – chris
Co powiesz na wywołanie 'T :: foo();' z 'B :: call'? – mfontanini