Я новичок C++. Я изучаю ADL (Augens Dependent Lookup). В моем понимании, virtual_function_with_EnumInBase(B<T>::EnumInBase e)
в строке (1) можно найти в ADL с помощью B<T>::EnumInBase
. Однако GCC 4.9.2 дает мне сообщение об ошибке:Augument Dependent Lookup не работает
virtual_function_with_EnumInBase
не был объявлен в этой области, и никакие декларации не были найдены по аргументу зависящих от поиска в точке конкретизации.
Если кто-то знает причину, по которой он не смог найти функцию, или замечает мое недоразумение, сообщите мне об этом. спасибо.
template<typename T>
class B {
public:
virtual ~B() = default;
enum EnumInBase { e0 = 0, e1 = 1 };
virtual void virtual_function_with_EnumInBase(EnumInBase e) {
std::cout << "B::virtual_function_with_EnumInBase(EnumInBase e)" << std::endl;
}
};
template<typename T>
class D : public B<T> {
public:
virtual ~D() = default;
void virtual_function_test(void) {
typename B<T>::EnumInBase val_for_lookup = B<T>::e0;
virtual_function_with_EnumInBase(val_for_lookup); // line (1)
}
};
void test(void) {
D<double> a;
a.virtual_function_test();
}
Спасибо Максим Егорушкин. Я прочитаю рекомендованный вами сайт. – mora