#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;
}
Điều này cho phép expected result:Thứ tự tìm kiếm phạm vi biểu tượng C++ khác nhau đối với mẫu và lớp không phải mẫu?
A::foo()
Tuy nhiên sau khi thay đổi hai dòng (lớp B để mẫu):
#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;
}
tôi nhận được unexpected result:
global foo()
Và sử dụng this->
là không phải là một lựa chọn như tôi đang cố gắng để cre ăn một cơ chế "dự phòng".
Thật thú vị. –
Sẽ 'gọi() {T :: foo(); } 'có được sử dụng không? Nó hoạt động. – chris
Cách gọi 'T :: foo();' từ 'B :: call'? – mfontanini